Re: [問題] 錄音 & call c function
※ 引述《lozbwlmnxu (lozb)》之銘言:
: 沒想到要考慮這麼多 orz
: 我之前都是用matlab錄音的 用wavrecord()這個函式
: 這個函式給他sample frequency 和 bit等參數
: 他就會開始錄音 變成wav檔
: 現在想在python上找一個像這種功能的函式
: 我也寫了很多信號處理的c程式 都是針對wave檔做處理的
: 所以希望寫一個python的視窗程式 把這些c程式做一個好用的介面
: 我不懂API
: 能達到錄音的功能 並存成 *.wav 格式的檔案 linux 或 windows都可以
: 因為已經有的c程式 在這二個系統下都可以跑
: 如果是可以錄音 但出來的檔案不是*.wav的話也是可以 只要是像wav檔一樣
: 只記錄波形大小等振幅資料 我都可以接受
: 反而這樣我可以更省力 直接把錄到的資料丟到寫好的程式即可。
: 請問這樣有解嗎?
如果沒有平台偏好的話...
我覺得用 linux 的 OSS 應該會最方便, 一來是有內建的 module 可以用,
二來是不管是 OSS 或 ALSA 都有支援 OSS 介面.
以下是幾個你可能會想用的 module:
audioop 可以用來處理 raw samples. (stored in python string)
wave 可以用來處理 .wav 格式
ossaudiodrv 可以用來對付 OSS 介面
文件可以看這裡: http://docs.python.org/lib/mmedia.html
OSS 介面我沒有用過, 所以這邊你可能得自己實驗了,
似乎直接 open, setparameters, 之後 read 出來的就是 raw samples.
不過它的 buffering 似乎不是很好用,
我不知道它要怎麼 query buffer size, 或是設定 callback...
---
至於呼叫 C 函數,
我稍微實驗了一下要怎麼用 ctypes 傳 byte array 跟 int,
其實還蠻簡單的, 以下是我的實驗:
$ cat dyn.c
#include <stdio.h>
void hello(int n, char *s){
fwrite(s, 1, n, stdout);
}
$ gcc -shared -fPIC dyn.c -o dyn.so
$ python
Python 2.4.3 (#1, May 11 2006, 17:04:29)
[GCC 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> dyn=ctypes.CDLL("./dyn.so")
>>> dyn.hello(6,"hello\n")
hello
6
>>> dyn.hello(4,"hello\n")
hell4
>>> dyn.hello(7,"hel\0lo\n")
hello
7
如果只是要傳聲音樣本的話, 我想應該是足夠的.
--
その乾いた哀愁の瞳に去來するものは何か?
失ったもの 得たもの
そして廣大なネットの狹間で彼が見たものとは?
虛像と實存と記號の中に彼は今、何を想うのか?
<バトルプログラマーシラセ>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.224.64
推
07/01 10:58, , 1F
07/01 10:58, 1F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章