You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/et/6-consumer/lessons/1-speech-recognition/pi-audio.md

8.6 KiB

Salvestage heli - Raspberry Pi

Selles õppetunni osas kirjutate koodi, et salvestada heli oma Raspberry Pi-ga. Helisalvestust juhitakse nupu abil.

Riistvara

Raspberry Pi vajab nuppu, et juhtida helisalvestust.

Nupp, mida kasutate, on Grove nupp. See on digitaalne sensor, mis lülitab signaali sisse või välja. Need nupud saab seadistada saatma kõrget signaali, kui nuppu vajutatakse, ja madalat, kui seda ei vajutata, või madalat, kui vajutatakse, ja kõrget, kui ei vajutata.

Kui kasutate ReSpeaker 2-Mics Pi HAT-i mikrofonina, siis pole vaja nuppu ühendada, kuna sellel HAT-il on nupp juba olemas. Jätkake järgmise jaotisega.

Ühendage nupp

Nuppu saab ühendada Grove base hat-iga.

Ülesanne - ühendage nupp

Grove nupp

  1. Sisestage Grove kaabli üks ots nupumooduli pistikusse. See läheb sisse ainult ühel viisil.

  2. Kui Raspberry Pi on välja lülitatud, ühendage Grove kaabli teine ots Grove Base hat-i digitaalse pistikuga, mis on märgitud D5. See pistik on GPIO pin-ide kõrval olevate pistikute reas vasakult teine.

Grove nupp ühendatud pistikuga D5

Helisalvestus

Mikrofonist heli salvestamiseks saate kasutada Python koodi.

Ülesanne - salvestage heli

  1. Lülitage Pi sisse ja oodake, kuni see käivitub.

  2. Käivitage VS Code, kas otse Pi-l või ühendage Remote SSH laienduse kaudu.

  3. PyAudio Pip pakett sisaldab funktsioone heli salvestamiseks ja taasesitamiseks. See pakett sõltub mõnest heliraamatukogust, mis tuleb esmalt installida. Käivitage terminalis järgmised käsud, et need installida:

    sudo apt update
    sudo apt install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev libasound2-plugins --yes 
    
  4. Installige PyAudio Pip pakett.

    pip3 install pyaudio
    
  5. Looge uus kaust nimega smart-timer ja lisage sellele kaustale fail nimega app.py.

  6. Lisage faili algusesse järgmised impordid:

    import io
    import pyaudio
    import time
    import wave
    
    from grove.factory import Factory
    

    See impordib pyaudio mooduli, mõned standardse Python moodulid WAV-failide käsitlemiseks ja grove.factory mooduli, et importida Factory, mis loob nupuklassi.

  7. Lisage selle alla kood Grove nupu loomiseks.

    Kui kasutate ReSpeaker 2-Mics Pi HAT-i, kasutage järgmist koodi:

    # The button on the ReSpeaker 2-Mics Pi HAT
    button = Factory.getButton("GPIO-LOW", 17)
    

    See loob nupu pordil D17, millele on ühendatud ReSpeaker 2-Mics Pi HAT-i nupp. See nupp on seadistatud saatma madalat signaali, kui seda vajutatakse.

    Kui te ei kasuta ReSpeaker 2-Mics Pi HAT-i ja kasutate Grove nuppu, mis on ühendatud base hat-iga, kasutage seda koodi.

    button = Factory.getButton("GPIO-HIGH", 5)
    

    See loob nupu pordil D5, mis on seadistatud saatma kõrget signaali, kui seda vajutatakse.

  8. Lisage selle alla PyAudio klassi eksemplar, et hallata heli:

    audio = pyaudio.PyAudio()
    
  9. Määrake mikrofonile ja kõlarile riistvarakaardi number. See on kaardi number, mille leidsite, kui käivitasite arecord -l ja aplay -l varem selles õppetunnis.

    microphone_card_number = <microphone card number>
    speaker_card_number = <speaker card number>
    

    Asendage <microphone card number> oma mikrofoni kaardi numbriga.

    Asendage <speaker card number> oma kõlari kaardi numbriga, sama numbriga, mille määrasite alsa.conf failis.

  10. Määrake selle alla helisalvestuse ja taasesituse jaoks kasutatav näidissagedus. Võimalik, et peate seda muutma sõltuvalt kasutatavast riistvarast.

    rate = 48000 #48KHz
    

    Kui saate hiljem koodi käivitamisel näidissageduse vigu, muutke see väärtus 44100 või 16000. Mida suurem väärtus, seda parem heli kvaliteet.

  11. Looge selle alla uus funktsioon nimega capture_audio. Seda kutsutakse mikrofonist heli salvestamiseks:

    def capture_audio():
    
  12. Lisage selle funktsiooni sisse järgmine kood heli salvestamiseks:

    stream = audio.open(format = pyaudio.paInt16,
                        rate = rate,
                        channels = 1, 
                        input_device_index = microphone_card_number,
                        input = True,
                        frames_per_buffer = 4096)
    
    frames = []
    
    while button.is_pressed():
        frames.append(stream.read(4096))
    
    stream.stop_stream()
    stream.close()
    

    See kood avab PyAudio objekti abil helisisendi voo. See voog salvestab heli mikrofonist sagedusel 16KHz, salvestades selle 4096-baidistes puhvrites.

    Kood kordab tsüklit, kuni Grove nuppu vajutatakse, lugedes iga kord need 4096-baidised puhvrid massiivi.

    💁 Lisateavet open meetodile edastatavate valikute kohta leiate PyAudio dokumentatsioonist.

    Kui nupp vabastatakse, voog peatatakse ja suletakse.

  13. Lisage selle funktsiooni lõppu järgmine kood:

    wav_buffer = io.BytesIO()
    with wave.open(wav_buffer, 'wb') as wavefile:
        wavefile.setnchannels(1)
        wavefile.setsampwidth(audio.get_sample_size(pyaudio.paInt16))
        wavefile.setframerate(rate)
        wavefile.writeframes(b''.join(frames))
        wav_buffer.seek(0)
    
    return wav_buffer
    

    See kood loob binaarse puhvri ja kirjutab kogu salvestatud heli sellesse kui WAV-fail. See on standardne viis tihendamata heli faili kirjutamiseks. See puhver tagastatakse.

  14. Lisage järgmine play_audio funktsioon, et taasesitada helipuhvrit:

    def play_audio(buffer):
        stream = audio.open(format = pyaudio.paInt16,
                            rate = rate,
                            channels = 1,
                            output_device_index = speaker_card_number,
                            output = True)
    
        with wave.open(buffer, 'rb') as wf:
            data = wf.readframes(4096)
    
            while len(data) > 0:
                stream.write(data)
                data = wf.readframes(4096)
    
            stream.close()
    

    See funktsioon avab teise helivoo, seekord väljundiks - heli taasesitamiseks. See kasutab samu seadeid nagu sisendvoog. Puhver avatakse WAV-failina ja kirjutatakse väljundvoogu 4096-baidistes tükkides, taasesitades heli. Voog suletakse.

  15. Lisage järgmine kood capture_audio funktsiooni alla, et tsüklitada, kuni nuppu vajutatakse. Kui nuppu vajutatakse, salvestatakse heli ja seejärel taasesitatakse.

    while True:
        while not button.is_pressed():
            time.sleep(.1)
    
        buffer = capture_audio()
        play_audio(buffer)
    
  16. Käivitage kood. Vajutage nuppu ja rääkige mikrofoni. Vabastage nupp, kui olete valmis, ja kuulete salvestust.

    Võite saada mõned ALSA vead, kui PyAudio eksemplar luuakse. See on tingitud Pi konfiguratsioonist heliseadmete jaoks, mida teil pole. Võite neid vigu ignoreerida.

    pi@raspberrypi:~/smart-timer $ python3 app.py 
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
    

    Kui saate järgmise vea:

    OSError: [Errno -9997] Invalid sample rate
    

    siis muutke rate väärtuseks kas 44100 või 16000.

💁 Selle koodi leiate kaustast code-record/pi.

😀 Teie helisalvestusprogramm oli edukas!


Lahtiütlus:
See dokument on tõlgitud AI tõlketeenuse Co-op Translator abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest.