以下代码将频率为400Hz的简单正弦写入单声道WAV文件.如何更改此代码以生成立体声 WAV文件.第二个频道应该是不同的频率.
import math
import wave
import struct
freq = 440.0
data_size = 40000
fname = "WaveTest.wav"
frate = 11025.0 # framerate as a float
amp = 64000.0 # multiplier for amplitude
sine_list_x = []
for x in range(data_size):
sine_list_x.append(math.sin(2*math.pi*freq*(x/frate)))
wav_file = wave.open(fname, "w")
nchannels = 1
sampwidth = 2
framerate = int(frate)
nframes = data_size
comptype = "NONE"
compname = "not compressed"
wav_file.setparams((nchannels, sampwidth, framerate, nframes,
comptype, compname))
for s in sine_list_x:
# write the audio frames to …Run Code Online (Sandbox Code Playgroud) 您可以使用MediaRecorder直接将流记录到AAC,但似乎没有办法将现有的PCM/WAV文件编码为AAC.编码到AAC的能力本身存在于Android中,我想使用它.是否有办法使用预先存在的音频文件?
我想使用Python 2.7从-1到1之间的浮点值数组生成一个24位WAV格式的音频文件.我不能使用scipy.io.wavfile.write,因为它只支持16或32位.Python自己的wave模块的文档没有指定它采用的数据格式.
那么在Python中可以这样做吗?
有没有办法读取 .wav 格式的二进制数据帧?我正在将 .wav 二进制文件流式传输到 python 服务器,我希望能够从 pyaudio 的处理中读取和使用,这会抱怨帧大小。
由于我不能使用wave.open('filename.wav'),因为我已经有了正在流式传输的二进制数据,有没有办法读取二进制数据,以便我可以使用python 库中的readframes方法wave?
编辑:我尝试readframes从客户端流式传输,但是 pyaudio 给出了字节不是 .wav 格式的错误。但是,如果我可以在服务器上完成此操作,那将是理想的。
我别无选择,只能直接在浏览器中播放wav文件(不幸的是,服务器端编码为mp3不是一种选择.)
最好的方法是什么?我真的很想利用HTML 5音频标签,但我的目标受众包括许多使用IE6的青少年.据我所知,闪存不是一种选择,但快速播放确实至关重要.
谢谢.
我正在尝试播放存储在称为字节的字节数组中的wav声音.我知道我应该将字节数组转换为wav文件并将其保存在我的本地驱动器中然后调用保存的文件,但我无法将字节数组转换为wav文件.
请帮我提供示例代码,将wav声音的字节转换为wav文件.
这是我的代码:
protected void Button1_Click(object sender, EventArgs e)
{
byte[] bytes = GetbyteArray();
//missing code to convert the byte array to wav file
.....................
System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(myfile);
myPlayer.Stream = new MemoryStream();
myPlayer.Play();
}
Run Code Online (Sandbox Code Playgroud) 任何人都知道在C#中创建ARBITRARY声波并从扬声器播放的合理方法吗?
这个问题已经不断出现多年,我总是在经历了很多失败之后放弃了它而没有找到解决方案.
我想做的就像一个反向可视化器,也就是说,我不想从声音生成"数字",我想从数字生成声音.
就像我提供的一个函数,我提供了采样率,样本大小和声音数据(例如整数数组),它会从中生成相应的wav文件(实时声音播放将是理想的,但我'对此也非常满意).
我知道wav文件规格遍布整个interweb,并且确实做了几次创建上述功能的尝试,但是一旦我开始弄乱每个样本的比特等等......它就变成了一个巨大的,无法控制的混乱.
这还没有以任何方式完成吗?我不会介意是什么用途,只要有一个.NET托管包装它(我可以从最近VS访问时间).XNA不支持低级音频.还发现了几个声称可以实现类似功能的例子,但它们要么根本不起作用,要么做一些完全不同的事情.
谢谢.
我想从字节数组中编写Wav文件,我还想从输入wav文件中分割通道
Java Sound API显示您可以从TargetDataLine录制音乐,并作为示例显示正在写入字节数组的数据.但是将这个字节数组写入自己的文件是相当无用的,因为它不是WAV文件格式,不能在其他应用程序中播放.
如何使用javax.sound.sampled包编写声音文件?
我最近一直在玩ruby,我决定开始一个简单的项目来编写一个ruby脚本来记录.wav文件的输入声音.我发现ruby不能提供对硬件设备的非常好的访问(它可能不应该),但PortAudio确实如此,我在这里发现了一个伟大的PA包装器(它不是宝石,我想因为它使用了ruby的ffi附加到PortAudio,PA库可以在各种地方).我一直在弄乱PortAudio的文档和示例来弄清楚PA是如何工作的.多年来我没有写过或读过C.
我在创建过程中应该将哪些参数传递给流,以及创建期间的缓冲区时遇到了困难.例如,究竟是一个frame,以及它是如何与其他参数,如channel和sample rate.我对音频编程也很陌生,所以如果有人能指点我一些关于设备级音频的一般教程等,我会很感激.
ruby-portaudio提供了一个创建流和缓冲区的示例,将sin波写入缓冲区,然后将缓冲区发送到要播放的流.我在示例中遇到一些问题,特别是循环块.
PortAudio.init
block_size = 1024
sr = 44100
step = 1.0/sr
time = 0.0
stream = PortAudio::Stream.open(
:sample_rate => sr,
:frames => block_size,
:output => {
:device => PortAudio::Device.default_output,
:channels => 1,
:sample_format => :float32
})
buffer = PortAudio::SampleBuffer.new(
:format => :float32,
:channels => 1,
:frames => block_size)
playing = true
Signal.trap('INT') { playing = false }
puts "Ctrl-C to exit"
stream.start …Run Code Online (Sandbox Code Playgroud) 我将SAPI类型库导入Delphi.我可以使用以下代码将语音输出到PC扬声器:
procedure TForm1.Button1Click(Sender: TObject);
var
Voice: TSpVoice;
begin
Voice := TSpVoice.Create(nil);
Voice.Speak('Hello World!', 0);
end;
Run Code Online (Sandbox Code Playgroud)
我可以.wav使用以下代码将语音输出到文件:
procedure TForm1.Button1Click(Sender: TObject);
var
Voice: TSpVoice;
Stream: TSpFileStream;
begin
Voice := TSpVoice.Create(nil);
Stream := TSpFileStream.Create(nil);
Stream.Open('c:\temp\test.wav', SSFMCreateForWrite, False);
Voice.AudioOutputStream := Stream.DefaultInterface;
Voice.Speak('Hello World!', 0);
Stream.Close;
end;
Run Code Online (Sandbox Code Playgroud)
问题是当我播放.wav文件时听起来很糟糕,就像使用非常低的比特率一样.Audacity告诉我文件是单声道16位22.05kHz,但听起来比这更糟糕.
如何将语音输出到单声道16位44.1kHz .wav文件,该文件与直接发送到PC扬声器的语音输出完全相同?我无法弄清楚如何修改第二个代码示例来设置每个样本的比特和比特率.
Follup-up: Glenn的答案解决了比特率的问题.感谢那.但是输出到.wav文件的语音质量仍然低于直接输出到扬声器的质量.我使用屏幕录制软件将第一个代码块的输出记录为helloworldtospeakers.wav.添加了Glenn的第二个代码块生成helloworldtowav.wav.第二个文件显然有一些失真.有任何想法吗?