Jumping Jack Flash weblog

Turn your phone into an universal remote control

Posted in hardware, Infrarossi, Sviluppo, Symbian by jumpjack on 10 giugno 2008

This short tutorial shows how to turn almost any cellphone into an universal IR remote control.

CHECK GoogleCode page for downloads and updates

Old post (with detailed instructions about how to build hardware)

How I did it (and credits)

Why it should work also on non-stereo cellphones (but it does not?!?) (see also excel file)

Useful links (explanations of remote control protocols)

Other uses for old phones
Available patents (not mine):
Infrared generator from audio signal source
IR receiver using IR transmitting diode


Ready-made transmitter: irDroid



– a cellphone with stereo audio output (audio left , audio right , ground) or symmetrical audio output (audio+, audio-)

– 2 IR leds

– a wired headset compatible with the phone

– a PC with audio card

– an audio recording software on PC

– an audio editing software for PC or an audio sinthesyzer software for PC

This project does not depend on O.S. used: you just need ANY computer capable of recording audio and create audio files from scratch. Linux, Windows, MacOSX or whatelse makes NO difference.

Please look at this post to know how to:
– build an IR receiver for the PC
– sample a remote control
– (create a WAV file using Audacity program) (not strictly needed: this article describe an alternate method).

Once you sampled all needed buttons of your remote, it’s just a matter of building a proper WAV file for each one of them. If you don’t want to use Audacity to do it manually, you can use SOX program: it creates pieces of “raw” audio file, which joined together build up the final WAV file.

Here you find example scripts (for DOS/Windows environment) which build a WAV file based on binary description of the remote signal. You have to setup the unizeri.bat file to have it matching the sampled signal. Then call create.bat specifying as parameter the “creator file” (unizeri-raw, or unizeri-tv,… ), the final WAV file (testbutton) and the number of additional times you want the command is repeated (at least ONE occurrence will be alway created):

create unizeri-raw testbutton 4

(no extensions required for filenames) (NOTE: script must be run inside SOX folder).

This will result in a tesbutton.wav file which, played on a phone (or on PC, or on any audio capable device), equipped with audio-to-IR converter, to control your device.

The audio-to-IR converter:

It is just a couple of LEDs connected in oppopsite ways to “audio output left” and “audio output right” (for normal phones) or to “audio+” and “ground” (for phones with symetrical audio output like nokia 6680). In symetricl ouptu, Left- and Right- must be connected together (see below).

Audio-to-IR converter:

Connections for nokia 6680:

(10 Ohm resistor not strictly needed)


Study about physics/optical phoenomena involved in this project:

Excel file – how to play a 38000 Hz “sound” through a 20000Hz-capable audio device

Big image summarizing Excel data


Forums about Ledrem:



PLC Forum

PC Tuner

HW upgrade





36 Risposte

Subscribe to comments with RSS.

  1. Oper said, on 10 giugno 2008 at 10:56

    ho notato che il nome del file all’interno del .zip e’ unizeri-raw.bat e non unizeri.bat, quindi ti conviene o modificare la guida o il .zip altrimenti ci si smarrisce per un po’.

    Inoltre se io scrivo:
    create unizeri-raw tasto5 3

    mi crea il file tasto5.wav ma con 3+1 pressioni del tasto e non 3 (praticamente ne mette 1 in piu’).

    I’m sorry for my bad english.

  2. jumpjack said, on 10 giugno 2008 at 13:10

    Grazie per l’appunto sul nome del file.
    Quanto al numero di ripetizioni errato… lo so, e’ che non so come sottrarre “1” a un numero in un file batch… per cui vanno considerate come le ripetizioni IN PIU’: almeno UNA volta il comando è necessario, le ripetizioni servono per i dispositivi un po’ “duri d’orecchi”.

    Cmq ora sistemo i file batch, erano un po’ rozzi…

  3. […] Pubblicato da jumpjack su 20 Maggio 2008 ===>> New updated post […]

  4. Gerhard said, on 7 settembre 2008 at 19:02

    its not working like this on my Nokia n80 because if i connect it like this my nokia not reconise the head setif i connect it with a normal stereo 3.5mm jack i get to hear the signal in the earphone but if i connect the led i get no signal there do you know which phone i can use to play the wav file and connect normal stereo 3.5mm jack ??? please help

  5. jumpjack said, on 8 settembre 2008 at 8:44

    Gerhard, you could try using a spare headset, by replacing speakers with leds. That’s what I actually did, rather than directly connecting to pins; I did so because I wasn’t else able to connect to such small pins… but maybe this way I “overrided” the issue of phone not seeing any headset connected?!?

  6. Gerhard said, on 20 settembre 2008 at 18:51

    i tried also this trick but then only one led light up

  7. jumpjack said, on 21 settembre 2008 at 9:21

    Maybe your phone is not compatible at all with this method…

    I found a list of possible nokia candidates for this project: they all support pop-port (the one on my 6680, which works fine) and they support WAV format, and as per TastePhone database they should also support j2me and even jsr-120 (send/receive messages):
    *Nokia N72
    *Nokia 3250 XpressMusic
    *Nokia 5500 Sport
    *Nokia E50
    *Nokia E61
    Nokia E61i (no data on TastePhone DB)
    *Nokia E70
    *Nokia N73
    Nokia N80 (no data on TastePhone DB)
    Nokia N91 (no data on TastePhone DB)
    Nokia N92 (no data on TastePhone DB)
    Nokia N93 (no data on TastePhone DB)
    Nokia N93i (no data on TastePhone DB)
    Nokia 6110 Navigator (no data on TastePhone DB)
    Nokia 6290 (no data on TastePhone DB)
    Nokia E90 (no data on TastePhone DB)
    Nokia N76 (no data on TastePhone DB)
    Nokia N95 (no data on TastePhone DB)
    Nokia 7710 (no data on TastePhone DB)

    *Nokia 3230
    *Nokia 7610
    *Nokia 6630
    *Nokia 6680 (DIRECTLY TESTED)
    *Nokia N70
    *Nokia N90

    I don’t know at which price they could be found!

  8. Gerhard said, on 22 settembre 2008 at 5:25

    not working with N80 and N82

  9. Nitesh Raol said, on 17 aprile 2009 at 16:48

    Recording remote signals were perfect and the waves were reproduced according to the method given.
    But the tv responds only when i replay the audio from an ipod. N95 was not working.
    I used an amplifier before connecting to the ir leds. The amplifier works with the ipod. I tried to receive the signal on the computer using an N95 to send it and it shows a lot of noise due to which the receiver is not recognizing the codes. But with an ipod the re is no noise. Does anyone know the reason?
    Which other phone can i try?

  10. Phil said, on 31 ottobre 2010 at 14:37

    I’m trying to create a WAV file using LEDRem from a LIRC config file, but have a problem, all the codes are in Hex format, and I believe you program requires Raw Codes, how can I convert from Hex to Raw so that the program will work?
    (The remote in question is a Philips 32PFL5403D)
    Your help with this would be greatly appreciated.

    • jumpjack said, on 1 novembre 2010 at 9:40

      Unfortunately you have to do it by hand, using Windows Calculator (or any other calculator program capable of converting from base 16 to base 10).

      Example of lircfile accepted by lirc2ledrem:


      • Phil said, on 2 novembre 2010 at 20:49

        Cool, I had figured something similar, but I think there is a little more to it. For example I take the Hex code 0x0EFFF3 (Power), and convert to base 10 (decimal)which equals 983.027.
        This does not look like a Raw code, am I missing a trick?

        • jumpjack said, on 2 novembre 2010 at 21:11

          It’s much too big!!
          Where/how did you get such values?

      • Phil said, on 2 novembre 2010 at 21:56

        The 0x0EFF3 comes from the 32PFL5403D/12 conf file off the LIRC database.
        I plugged this into http://www.easysurf.cc/cnver17.htm#b16tob10.

        This is a RC6 protocal remote, so I’m not certain how the conversion would go?

        • jumpjack said, on 2 novembre 2010 at 22:08

          That file can’t be in any manner translated into RAW lirc or ledrem format, which describes durations of signal bursts and signal pauses: those code are specific for RC6 protocol, and used by LIRC to rebuild the signal waveform.
          I don’t temember if LIRC or others are capable of converting from a LIRC format to another. Maybe TONTO program? It is very complex, but maybe you can use it to determine graphically how waveform for each channel would look.

          Else, you can sample your remote by hand as described in the blog.

      • Phil said, on 2 novembre 2010 at 22:43

        Thanks for the advice, I have also just sent a message to a RC5/RC6 Protocol Expert in the hope that he might be able to help in providing an answer to this mystery.
        I should explain that I’m an Aerospace Engineer, and not afraid of good challenge.
        So many IRemotes utilise the Philips protocols so if we can crack this it would mean that the vast majority of LIRC conf’s could be converted into a ‘audio library’.
        I’ll keep you posted when I have more.

  11. jumpjack said, on 3 novembre 2010 at 10:28

    That’s why I asked you to sample a couple of keys of your remote: maybe by comparing waveform to hex code we could figure out how codes are built.

    I collected some links about RC6 protocol, months ago.
    I don’t remember quite anything about them 🙂 , but maybe you want to take a look at them:

    • Phil said, on 5 novembre 2010 at 18:21

      Ok, I have made some progress.
      Basically this can be done by starting with Pronto Codes, and the Pronto2LIRC python program to converts this to LIRC Raw Codes which when LEDRem comes in.
      I’ve done a dry run on an RC6 device code, and got a very plausible waveform, but not yet found the right one for the TV.
      Trouble is, without a Pronto handset it is taking a while to find the code with ProntoEdit, and no one at http://www.RemoteCentral.com has been able to help yet. I’m hoping that the guy who put me onto Pronto might be able to help with how best to track down the right codes.

      • jumpjack said, on 5 novembre 2010 at 19:12

        Can you send me a wave file obtained from sampling your actual remote and a wave file obtained from pronto data? (even if it’s not the same key)

      • Phil said, on 6 novembre 2010 at 16:27

        I can indeed, do you have some contact details?

  12. […] что описано в данном уроке, не является открытием, и описано довольно много где, и даже […]

  13. exc said, on 22 novembre 2011 at 18:22

    We tired this project we have any question.
    The first of all we tired project in a PC. Receiver connection is working well but transmit schmatics is different the cell phone.We make it
    Z 10 ohm

    it's true or false ?

  14. […] World’s cheapest remote control replicator: just 1$ !Turn your phone into an universal remote control […]

  15. Lóránt Döbröndi said, on 8 gennaio 2014 at 0:44

    I know this is an old post, but I have to try my luck.
    A friend of mine lost the remote for a “44 button RGB LED Controller”
    I found online the codes for the buttons : http://blog.allgaiershops.com/2012/05/10/reversing-an-rgb-led-remote/

    How can I control the LED Controller with my PC?
    If I make the little audio jack + IR Led thing, plug it in my laptop, and somehow convert the waves, will it work?
    Can you help me with it?

    • jumpjack said, on 8 gennaio 2014 at 11:27

      Give it a try and let me know if/how I can help! 🙂

  16. Adam said, on 20 agosto 2014 at 20:14

    Hi, I’ve got it working in Audacity and it plays fine. I’ve exported it as a .WAV file. Importing it into Audacity and replaying it works fine, however every other player doesn’t.

    The ones I have tried are:
    VLC Media Player
    Windows media player
    Windows media centre
    Android’s media player (Samsung S II)
    Android VLC
    iPhone 5 and 4 music player
    iPod touch 2 music player
    Mac finder view thingy (I think this is based off quicktime?)
    Mac iTunes (may also be based off Quicktime).

    I’ve tried removing anything like an equaliser / filter with no luck. No idea how I managed to create an Audacity only file..

    Thanks so much for the post, you’re awesome 😀

    • Adam said, on 21 agosto 2014 at 8:27

      Also, I had a really cool idea. I have two of those IR controlled colour lamps. If they are placed only about 50cm away they can be controlled separately because led is so weak.

      How do you build just one 38000Hz signal? Then you could duplicate it, one for left, one for right. So you can choose which LED lights up, therefore which lamp changes. With the original remote, it would turn it on from 10 meters, which meant I couldn’t control them separately, or do fun stuff with them.

      I code software so I’d know how to build something that would only play left/right from one audio file, just need to know how to create original file (I’m guessing us 38000Hz not 19000Hz in tutorial?), and know if there are any hardware changes.

      I’m also wondering how to decode it, because it has 12 colour presets on the remote, and they could be colour codes, so I could send custom signals. Or they just might be stored as presets 😦

      I know it can do all colours because from a preset you can fine tune it with RGB channels.


      • jumpjack said, on 21 agosto 2014 at 8:41

        This is cool!
        You could share the IR code, maybe they are universal?…

        • Adam said, on 22 agosto 2014 at 8:59

          Hi, just figured out why it wouldn’t work. The sound file was too short, lengthening made it work.

          How can I share the IR code? I’m new to this, so only have the .wav files and audacity projects.

          • jumpjack said, on 22 agosto 2014 at 12:42

            Nice finding.
            You can send both short and long file to jumpjack at libero dot it, I’ll upload it on my site.


            • Adam said, on 22 agosto 2014 at 13:29

              Sure, I’ll send them when I have recorded all of them 🙂

      • jumpjack said, on 22 agosto 2014 at 12:44

        To build programmatically a 38000 Hz wave file you must study WAV format. I did it to write my programs, but currently I don’t remeber anything about it… 🙂 I only remember it was not that hard, being a plain, uncompressed format.

  17. moritzdehneri8 said, on 1 settembre 2015 at 22:12

    This short tutorial shows how to turn almost any cellphone into an universal IR remote control. CHECK GoogleCode page for downloads and … rremoteu.wordpress.com

  18. Viola Wang said, on 5 luglio 2016 at 4:18

    Hi, thank you for this post, I create my own receiver/transmitter successfully
    I fail to use sox batch files ( maybe because something wrong when I modified them for Linux )
    But I successfully create a python script according to your audacity steps.

    from array import array
    from struct import pack
    import numpy as np
    import wave
    import pyaudio
    import codeset
    import subprocess
    import signal, sys
    THRESHOLD = 1500
    CHUNK_SIZE = 1024
    FORMAT = pyaudio.paInt16
    RATE = 44100
    def record():
    Record signal from the microphone and
    return the data as an array of 1/0 (according on THRESHOLD).
    p = pyaudio.PyAudio()
    """ take data as MONO, because data set is smaller """
    stream = p.open(format=FORMAT, channels=1, rate=RATE,
    input=True, output=True,
    num_silent = 0
    rcv_started = False
    r = array('h')
    while 1:
    rcv_data = array('h', stream.read(CHUNK_SIZE))
    """ change it to 1 and 0 accroding to THRESHOLD """
    rcv_data = [ (x>THRESHOLD) for x in rcv_data ]
    silent = (sum(rcv_data) < 10 )
    if silent and rcv_started:
    num_silent += 1
    elif not silent and not rcv_started:
    rcv_started = True
    if rcv_started :
    if rcv_started and num_silent > 10:
    sample_width = p.get_sample_size(FORMAT)
    return sample_width, r
    def sigterm_handler(_signo, _stack_frame):
    def main() :
    while True:
    waveFileName = raw_input("Enter button name (q to quit) : ")
    if waveFileName is 'q' :
    sample_width, data = record()
    duration = len(data)/float(RATE)
    sineWav = (np.sin(2*np.pi*np.arange(RATE*duration)*19000/RATE)).astype(np.float32)
    track1 = sineWav * data * 30000.0
    track2 = track1 * 1
    wf = wave.open(waveFileName+".wav", 'wb')
    for s, t in zip(track1, track2):
    wf.writeframes(pack('h', int(s)))
    wf.writeframes(pack('h', int(t)))
    if __name__ == '__main__':

    view raw
    hosted with ❤ by GitHub

    usage : python recordSendIRWav.py

    it will generate wave file directly for sending.
    it need to install python 2.7 , pyaudio, numpy before executing

  19. […] protocol, all I need to do is encode the infrared signal using a receiver which I built using this guide. The essentials of the project is found here so you may want to check it out for a detailed […]

Puoi inserire un commento qui sotto; diventerà visibile dopo la moderazione dell'amministratore

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: