2011-12-16 243 views
8

我正在玩高调的声音。我想用1秒钟的15Khz突发产生一个MP3文件。有没有简单的方法来从C或Python做到这一点?我不想使用MATLAB。使用15Khz音调生成声音文件

+1

记住的15KHz的音调可具有多种形状,即正弦波,方波,三角波,锯齿波等 – dreamlax 2011-12-16 03:50:59

+0

我将是一个解决方案很感兴趣,这直接生成mp3。创建一些wave文件并使用lame压缩它是一个非常明显但无聊的解决方案。一些小的C编,它可以产生一个带有任何解码器可以播放的音调(15kHz或其他)的mp3,真是太棒了。任何MP3文件的极客? – 2011-12-16 09:28:04

回答

14

您可以使用Python的wave模块创建一个wave文件,然后将其压缩为MP3。要创建一个秒钟15KHZ正弦波:

import math 
import wave 
import struct 

nchannels = 1 
sampwidth = 2 
framerate = 44100 
nframes = 44100 
comptype = "NONE" 
compname = "not compressed" 
amplitude = 4000 
frequency = 15000 

wav_file = wave.open('15khz_sine.wav', 'w') 
wav_file.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname)) 
for i in xrange(nframes): 
    sample = math.sin(2*math.pi*frequency*(float(i)/framerate))*amplitude/2 
    wav_file.writeframes(struct.pack('h', sample)) 
wav_file.close() 
-1

你试过:

#include<dos.h> 
#include<iostream.h> 
#include<conio.h> 
main() 
{ 
    sound(500); // Frequency 
    delay(1000); // Time 
    nosound(); // Stop 
} 
+0

这个库从过去是如此的激动人心,但它今天运行的平台是什么? – 2011-12-16 03:46:37

2

我会打破这种成2件:

  1. 使用C++库(如libsndfile库)
  2. 转换波形文件创建波形文件MP3使用实用工具(如lame)。这是一个命令行工具,可以从你的C程序中调用。请参阅-t将wave转换为mp3。

有一点需要注意的是15KHz是非常高的频率被人类听到,我猜大多数扬声器不能播放它,因为它超过了它们的截止频率。所以如果你没有听到结果,不要感到惊讶。