我正在尝试对声卡进行编程以输出特定值。
让我们说,我有以下序列
[1,2,3,2,10,4,1,50,20,1]
我希望声卡按照这个顺序输出指定的模拟信号。
我当然可以使用Windows Multimedia API。但是,我的任务很轻,我不想使用这么重的框架。
对此有何建议?
答案 0 :(得分:0)
我建议你生成一个.wav文件并用媒体播放器播放。
使用python及其wave
模块很容易。在我的下面的例子中,我使用python 3.3
import wave
import struct
# define your sequence
frames = [1,2,3,2,10,4,1,50,20,1]
output = wave.open('out.wav', mode='wb') # create the file that will contain your sequence
output.setnchannels(1) # 1 for mono
output.setsampwidth(1) # resolution in number of bytes
output.setframerate(10) # sampling rate, being usually 44100 Hz
output.setnframes(len(frames)) # sequence length
for i in range(0, len(frames)):
output.writeframes(struct.pack('h',frames[i])) # convert to string in hex format
# close the file, you're done
output.close()
答案 1 :(得分:0)
如果你使用Matlab或免费的等价物Octave,你可以在一行中完成。相关文档为here。
soundsc(x, fs, [ lo, hi ]) Scale the signal so that [lo, hi] -> [-1, 1], then play it at sampling rate fs. If fs is empty, then the default 8000 Hz sampling rate is used.
您在控制台中的函数调用看起来像这样......
soundsc([1,2,3,2,10,4,1,50,20,1], fs, [1 50]);
...或者像这样通过手动归一化正整数向量来给出+/- 1 ...
之间的值x = [1,2,3,2,10,4,1,50,20,1];
x=x-min(x); % get values to range from zero up
x=x/max(x); % get floating point values to range between 0.0 and 1.0
x=x*2-1; % get values to range between +/- 1.0;
soundsc(x);