我想使用java媒体框架将.mov文件与.wav文件合并,因此我需要知道它们的持续时间.我怎样才能做到这一点?任何想法,将不胜感激..
我在AS3中有一个工作的麦克风录音脚本,我已经成功地通过AMF将.wav文件保存到服务器.这些文件在任何音频播放器中都能正常播放,没有奇怪的效果.
作为参考,我正在做的是捕捉麦克风的ByteArray :(在一个名为AudioRecorder的类中)
public function startRecording():void {
_rawData = new ByteArray();
_microphone
.addEventListener(SampleDataEvent.SAMPLE_DATA,_samplesCaptured, false, 0, true);
}
private function _samplesCaptured(e:SampleDataEvent):void {
_rawData.writeBytes(e.data);
}
Run Code Online (Sandbox Code Playgroud)
这没有问题.录制完成后,我可以使用_rawData变量并通过WavWriter类等运行它.
但是,如果我使用以下代码运行同样的ByteArray作为声音我从adobe cookbook改编:(在一个名为WavPlayer的类中)
public function playSound(data:ByteArray):void {
_wavData = data;
_wavData.position = 0;
_sound.addEventListener(SampleDataEvent.SAMPLE_DATA, _playSoundHandler);
_channel = _sound.play();
_channel
.addEventListener(Event.SOUND_COMPLETE, _onPlaybackComplete, false, 0, true);
}
private function _playSoundHandler(e:SampleDataEvent):void {
if(_wavData.bytesAvailable <= 0) return;
for(var i:int = 0; i < 8192; i++) {
var sample:Number = 0;
if(_wavData.bytesAvailable > 0) sample = _wavData.readFloat();
e.data.writeFloat(sample);
}
}
Run Code Online (Sandbox Code Playgroud)
音频文件以双倍速度播放!我检查了记录比特率等等,我很确定这些都是正确的,我尝试改变缓冲区大小和我能想到的任何其他数字.它可能是单声道与立体声的东西吗?
希望我在这里很清楚,谢谢!
我正在使用一种工具来比较两个波形文件的波形相似性。例如,我有一个持续时间为1min的波形文件,我使用第一个波形文件制作了另一个波形文件,但是每个5sec数据的间隔为5秒至0。现在,我的软件会告诉您,在5sec至10sec的时间间隔内存在波形差异,15秒至20秒,25秒至30秒,依此类推...
截至目前,通过初步开发,此方法可以正常工作。以下是3个测试集:
我有两个波形文件,采样率为960Hz,单声道,没有数据采样为138551(1分钟12秒的文件)。我正在使用128点FFT(在128个样本块中拆分文件),效果很好。
当我对采样率为48KHz,2通道的波文件使用相同的算法时,每个通道均没有数据采样6927361(文件为2min 24秒),过程变得太慢了。当我使用4096点FFT时,过程会更好。
但是,在22050Hz,2通道的文件上使用4096点FFT,每个通道的数据采样数为55776(文件长度为0.6秒),结果非常差。在这种情况下,128点FFT效果很好。
因此,我对如何确定FFT的长度感到困惑,因此在每种情况下我的结果都是不错的。
我猜长度应该取决于样本数量和采样率。请对此提供您的意见。
谢谢
在iOS中很容易获得加载的.wav文件中的字节数:
UInt64 dataSize = 0; // dataSize
UInt32 ps = sizeof(UInt64); // property size
if( AudioFileGetProperty(fileId, kAudioFilePropertyAudioDataByteCount, &ps, &dataSize) )
puts( "error retriving data chunk size" );
return dataSize ;
Run Code Online (Sandbox Code Playgroud)
但是在文档中我似乎无法找到有关如何确定PCM波形文件采样率的任何信息.
我想在 Python (2.x) 中创建 32 位浮点 WAV 文件。虽然“标准”WAV 文件通常使用 int,但许多专业音频应用程序将音频数据处理(并保存)为浮点数。标准的 wave 模块无法做到这一点:http : //bugs.python.org/issue16525 有没有人在不使用修补模块的情况下实现了这一点?tnx 寻求任何帮助。
我有raw-headerless wav音频数据作为MemoryStreams.
Stream rawAudioStream = Producer.GetRawAudioFileStream(...);
Run Code Online (Sandbox Code Playgroud)
我知道那些流数据格式:
// WaveFormat(int rate, int bits, int channels);
WaveFormat waveformat = new WaveFormat(8000, 16, 1);
Run Code Online (Sandbox Code Playgroud)
我想要的是以编程方式为这些内存流添加正确的头信息,而无需将它们写入物理文件.
我怎样才能做到这一点?
PS:我检查了NAudio库,但只找到了一种通过将流写入真实物理文件来创建标头的方法,这种方式不适合我的情况.
var waveformat = new WaveFormat(8000,16,1);
var reader = new RawSourceWaveStream(rawAudioMemStream, waveformat);
using (var convertedStream = WaveFormatConversionStream.CreatePcmStream(reader))
{
WaveFileWriter.CreateWaveFile(fileName, convertedStream);
}
rawAudioMemStream.Close();
Run Code Online (Sandbox Code Playgroud) 我想用python wave模块改变某个WAV音频文件的播放速度(增加或减少).
我尝试下面的事情:
但它没有成功.
请建议.
提前致谢,
我正在尝试理解WAV文件的标题.我打开了一个示例文件,得到了这个:
5249 4646 e857 1400 5741 5645 666d 7420
1000 0000 0100 0200 44ac 0000 10b1 0200
0400 1000
Run Code Online (Sandbox Code Playgroud)
我一直在阅读这个数据表示教程.
据我所知,这52是一个字节,代表ASCII字母R.我明白了1000 0000.为什么这表示十进制16?该教程说,该位置的值始终是0x10.如何1000 0000等同于0x10.
此外,在读取文件时,程序是否会知道是否需要数字或ASCII?据推测,它会检查已经在HEX中的值?
谢谢
我正在编写一个程序来读取和处理数字信号处理类项目的WAV文件,我有两个测试文件.我可以读RIFF,fmt和data正常块.两个文件都有fmt Chunk Size: 16,但是文件B在块fmt和data块之间有这个十六进制的杂散块.
我确定这不是随机数据.我推测它有关于该文件的一些元数据,所以我将它的歌曲标题转换Colors为十六进制,并且发现43 6f 6c 6f 72 73它位于该流行块中.我觉得这不是巧合.我访问过的所有站点只提到了一个2字节的变量,它告诉了fmt块末尾的额外参数的大小.如果两个fmt块声称只有文件B,则情况不是这样16 bytes.
我猜测文件B中还有其他块.我没有找到关于这些可选(?)块的任何信息.我需要帮助才能知道我在wav文件中可以查找的其他子块.我根本不知道可以存在于WAV文件中的其他块的标签
文件A("我跑得太远了.wav")包含这个标题.我从互联网上下载了这个文件.
5249 4646 24c0 c900 5741 5645 666d 7420
1000 0000 0100 0100 2256 0000 44ac 0000
0200 1000 6461 7461 00c0 c900
Run Code Online (Sandbox Code Playgroud)
文件B("Colors.wav")包含此标头.这是我从.mp3下载到.wav转换器的文件.
5249 4646 7c32 4a02 5741 5645 666d 7420
1000 0000 0100 0200 44ac 0000 10b1 0200
0400 1000 4c49 5354 5000 0000 …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一堆.wav文件的频谱图,以便我可以进一步分析它们(在python 3.6中),但是,我不断收到此讨厌的错误
ValueError: Unsupported bit depth: the wav file has 24-bit data.
Run Code Online (Sandbox Code Playgroud)
我研究了其他堆栈溢出问题,例如 如何用Python编写24位WAV文件? 但是这些都不能解决问题!
我找到了一个名为Pysoundfile的音频库
http://pysoundfile.readthedocs.io/en/0.9.0/
我安装了
pip3 install pysoundfile
Run Code Online (Sandbox Code Playgroud)
我查看了文档,但仍然不清楚如何将24位.wav文件转换为32位wav文件或16位wav文件,以便可以从中创建频谱图。
任何帮助,将不胜感激!