生成一个15Khz音调的音频文件

8 投票
3 回答
1697 浏览
提问于 2025-04-17 08:28

我在尝试制作高频声音。我想生成一个包含1秒钟、频率为15千赫兹的声音的MP3文件。请问有没有简单的方法可以用C语言或Python来实现?我不想使用MATLAB。

3 个回答

-1

你试过这个吗:

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

我会把这个分成两部分来讲:

  1. 首先,使用一个C++库(比如libsndfile库)来创建一个波形文件(wave file)。
  2. 然后,使用一个工具(比如lame)把这个波形文件转换成mp3格式。这个工具是命令行工具,你也可以在你的C程序中调用它。可以查看-t这个选项来了解如何把wave文件转换成mp3。

需要注意的是,15KHz的频率对人耳来说是非常高的,我猜大多数扬声器都无法播放这么高的频率,因为它超出了它们的工作范围。所以如果你听不到结果,也不要感到惊讶。

14

你可以使用Python的wave模块来创建一个波形文件,然后再把它压缩成MP3格式。如果你想生成一个持续一秒、频率为15千赫兹的正弦波,可以参考下面的代码:

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()

撰写回答