【问题标题】:Generate a Sound file with a 15Khz tone [closed]生成具有 15Khz 音调的声音文件 [关闭]
【发布时间】:2012-01-21 16:33:44
【问题描述】:

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

【问题讨论】:

  • 请记住,15KHz 的音调可以有多种形状,即正弦、正方形、三角形、锯齿等。
  • 我对直接生成 mp3 的解决方案非常感兴趣。创建一些波形文件并用 lame 压缩它是一个非常明显但无聊的解决方案。一些小的 C prog 可以生成带有可以由任何解码器播放的音调(15kHz 或其他)的 mp3,这将是很棒的。这里有mp3文件的极客吗?

标签: python c audio mp3


【解决方案1】:

你试过了吗:

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

【讨论】:

  • 那个库在过去很受欢迎,但它现在在哪些平台上运行?
  • 这是如何被赞成的?不仅是过时的 C 实践(隐式返回值),而且当标签或问题中没有指定平台时,平台特定......也与生成 MP3 无关。
【解决方案2】:

我会把它分成两部分:

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

需要注意的一点是 15KHz 是人类听到的非常高的频率,我猜大多数扬声器都无法播放它,因为它超出了它们的截止频率。因此,如果您没有听到结果,请不要感到惊讶。

【讨论】:

  • +1,但关于扬声器范围,许多耳机的响应频率高达 20,000Hz。听不听就另当别论了!
【解决方案3】:

您可以使用 Python 的 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2015-04-17
    • 2012-12-16
    • 2021-12-02
    相关资源
    最近更新 更多