파이썬 ctypes wave 파일 연주

Posted at 2007/11/29 21:09// Posted in python
PDA 수업 - 실은 컴퓨터 네트워크 수업인데; 실습과제를 하라고 PDA 를 하나 주는 바람에 이름지어진 - 의 마지막 과제는 IPV6 를 이용한 실시간 음성 통신입니다

무선랜 상태에서 IPV6 를 이용한 신뢰성있으면 혼잡제어가 가능한 데이터그램 통신보다는 쉬워보입니다만... 그래도 '실시간'과 '음성' 그리고 '통신'이 들어가니 나름 괴롭네요 = =)>

일단 리눅스에서 wave 파일 연주를 해야하기 때문에 VMWare Player 와 우분투를 설치했습니다. (흑흑-_- 이거 안하려고 운영체제 실습도 철회했는데 결국 리눅스를 깔아야하는군요)

사용자 삽입 이미지

요즘에는 우분투 이미지를 따로 올려주어서 설치하기는 편하더군요.
모양도 이쁘고... 백스페이스 두번 눌렀을때 다운만 안되면 정말 좋았을 겁니다 ㄱ-)/

일단 리눅스의 사운드 연주 소스입니다.

#!/usr/bin/python
import linuxaudiodev
import wave

src = wave.open("test.wav", "rb")
channels, bytes, freq, frameCount, compType, compName  = src.getparams()

dsp = linuxaudiodev.open("/dev/dsp", "w")
dsp.setparameters(freq, bytes*8, channels, linuxaudiodev.AFMT_S16_LE, False)

frameStep = 1000
for pos in range(0, frameCount, frameStep):
    buf = src.readframes(frameStep)
    dsp.write(buf)

리눅스에서 사운드 플레이를 정말 쉽습니다 -_-)~ 그냥 모든게 파일이라 좋아요.

하지만 역발상의 대가 윈도우에서는 유닉스와는 다른길을 걷기 때문에
위의 코드로 작동이 되지 않습니다 -_-)> wav 파일이라면 winsound 라는 모듈을 지원하지만
지금 작업은 RAW 데이터를 플레이하는거라서 직접 wave파일에 접근해야합니다.

다행히 http://www.johnnypops.demon.co.uk/ 라는 사이트에서
녹음 기능을 ctypes 로 구현해놓은것이 있어서 (정말 좋은 사람이예요 >ㅁ<)/ )
이 소스를 활용해 같은 기능을 하는 프로그램을 만들어보았습니다.
(c++ 객체만 ctypes 로 꺼낼수 있으면 정말 행복할거예요)

more..



음; 웨이브 출력이 비동기라서 코드가 약간 달라져야 하더군요;













이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/11/29 21:09 2007/11/29 21:09
Tag ,