행복한 하루

[PICO] Raspberry Pi PICO(MicroPython)를 이용한 wav 출력테스트 본문

RaspberryPi/Raspberry Pi Pico

[PICO] Raspberry Pi PICO(MicroPython)를 이용한 wav 출력테스트

변화의 물결 2023. 7. 4. 10:01

 

 

 안녕하세요.

 

 PICO에서 소리 출력이 가능할까 궁금해서 인터넷 검색하는 중에 관련된 내용이 있어 테스트해 보았습니다. 하드웨어 적인 부분은 최소화하고 출력할 수 있게 해주는 공개해 주시는 소스가 있어 감사하게 테스트해 보았습니다.

 

 기본적으로 MP3를 출력하려면 디코더와 앰프도 필요한데, 앰프는 앰프 포함된 스피커를 이용하고 디코더는 모듈로 파는 것을 사용하면 됩니다. 그러나 디코더 부분도 소프트웨어적으로 공개된 것이 있어 사용할 수 있습니다.

 CircuitPython로는 MP3 출력하는 예제들이 있었지만,  MicroPython로 공개된 MP3 플레이어 소스는 찾지 못했습니다. 그러나 wav 파일을 재생하는 소스를 찾을 수 있어서 확인해 보았습니다.

 MP3 디코더 모듈을 사용하는 내용은 다음에 테스트해 볼 예정입니다.


1. 하드웨어 연결

 - 하드웨어 연결을 위해서는 케이블 작업이 조금 필요합니다. 가지고 있는 앰프형 스피커가 3.5파이 수단자로 되어 있기 때문에 암단자를 구해서 점퍼선과 연결해 주었습니다. 스테레오 케이블을 잘라보면 3가닥이 나옵니다. 오픈소스상에도 스테레오 타입으로 Left, Right 핀을 나누고 있습니다. 그러나 확인 차원에서 GND와 LEFT를 연결하였습니다.

 

 - 검은색선은 GND로 Pico GND 핀 아무 곳에 연결합니다. 다른 하나는 GP2 혹은 GP3에 연결합니다. 스테레오 케이블이라 어느 쪽이 Left선 인지, Right선 인지 알 수 없기 때문입니다.

2. 약간의 제약사항

 -  Pico 스펙상 2MB QSPI Flash를 가지고 있기 때문에 프로그램 소스와 기타 내용을 포함해서 2MB 내에 wav 파일을 생성해야 합니다. 그렇기 때문에 생각했던 음질로 노래 전체  음악을 듣지 못할 수 있습니다. 그러나 향후 SD카드 모듈을 사용한다면 이 부분을 보완할 수 있습니다.

 - myPWM 소스에서 설정이 약 122.5KHz에 255(8bits) 혹은 1023(10 bits)으로 설정할 수 있다. 그리고 압축된 코덱을 사용할 수 없는 것도 있습니다.

3. 소스확인 방법

1) wave 관련 파일 wave.py과 chunk.py 파일 다운로드

 https://github.com/joeky888/awesome-micropython-lib/tree/master/Audio

 

 - github에 있는 파일 2개를 다운로드한 후 Pico에 업로드합니다.

 - 최소화된 wave 모듈(wave.py)과 Audio chunk파일(chunk.py)을 다운로드합니다. 여기서 chunk는 wave 파일 구조를 이루는 블록이라고 보시면 됩니다. (좀 더 자세한 이해가 필요하다면 하단 참고사이트 4, 5를 참조하시면 됩니다.)

 

2) play소스코드를 다운로드

https://github.com/danjperron/PicoAudioPWM

 

 - github에 있는 파일들 전부 다운로드한 후 Pico에 업로드합니다.

 - 그중에 TestwavePlayer.py은 Main 소스로, 다른 부분 수정할 필요 없이 Pico에 flash 폴더를 생성 후 테스트할 wave파일을 폴더에 놓고 실행하면 됩니다.

 

- 추가로, 출력핀을 변경하고 싶다면 wavePlayer.py파일을 열어 보면 디폴트로 출력할 핀번호가 적혀 있습니다. 현재 GP2, GP3으로 되어 있는데, 이것을 변경해 주시면 됩니다. 변경할 때는 Pico 핀맵에서 SPI라고 표시된 분홍색 핀을 사용하셔야 합니다.

 

class wavePlayer:
    def __init__(self,leftPin=Pin(2),rightPin=Pin(3), virtualGndPin=Pin(4),
                 dma0Channel=10,dma1Channel=11,dmaTimer=3,pwmBits=10):

 

 

4. 동작확인

- 모든 파일을 Pico에 업로드했다면 아래 사진과 같이 되었을 것입니다. 여기서 flash 폴더는 wav파일을 저장하기 위해서 생성했습니다.

 

- Thonny에서 TestwavePlayer.py파일을 열어 실행하면, flash 폴더에 있는 wav파일들을 돌아가면서 소리와 함께 로그를 출력합니다.

 

  

 - 케이블을 스피커에 연결하면 소리가 나오는데, 만약 소리가 조금 작게 나온다면 Left, Right 핀을 한번 바꿔 연결해 보시기를 바랍니다. 단연히 스피커 볼륨은 높여 놓고 테스트해야 하겠죠.

 

 

감사합니다.

 

 

<참고 사이트>

1. joeky888/awesome-micropython-lib

https://github.com/joeky888/awesome-micropython-lib/tree/master/Audio

2. PicoAudioPWM

https://github.com/danjperron/PicoAudioPWM

3. Playing an Audio File

https://www.coderdojotc.org/micropython/sound/07-play-audio-file/

4. Wave Data File 구조

https://gopae02.tistory.com/entry/Wave-Data-File-%EA%B5%AC%EC%A1%B0

5. [DirectSound] 1. Wave 파일의 구조

https://psychoria.tistory.com/212    

 

 

Comments