我想使用动态时间扭曲来比较两个音频录制的两个特征向量(当然我先做所有必要的预处理).我的程序应以百分比形式输出两个录音之间的相似性.例如,100%意味着两个录音完全相同,录音越多,我得到的数字越少.我该如何解决这个问题?DTW只给出了路径的长度或转换的成本,我不知道如何将这些数字之一转换为百分比值.
我想找到wav文件中某些时间范围之间的帧数,这通常是使用函数wave.getnframes我们可以得到完整波形文件中的帧数但是在这里我想知道如何找到a之间的数字帧某些时间范围这样的帧数在5.43秒到5.81秒之间.
我们应该怎么做??
请建议如何做到这一点......
提前致谢
从音频文件中提取数据字节时,以下两种实现有什么区别?
该文件是一个.wav文件,我想只提取数据,没有标题或任何其他东西.
实施1:
public byte[] extractAudioFromFile(String filePath) {
try {
// Get an input stream on the byte array
// containing the data
File file = new File(filePath);
final AudioInputStream audioInputStream = AudioSystem
.getAudioInputStream(file);
byte[] buffer = new byte[4096];
int counter;
while ((counter = audioInputStream.read(buffer, 0, buffer.length)) != -1) {
if (counter > 0) {
byteOut.write(buffer, 0, counter);
}
}
audioInputStream.close();
byteOut.close();
} catch (Exception e) {
System.out.println(e);
System.exit(0);
}// end catch
return ((ByteArrayOutputStream) byteOut).toByteArray();
}
Run Code Online (Sandbox Code Playgroud)
实施2:
public …Run Code Online (Sandbox Code Playgroud) 我知道可以从AIFF和WAV转换为MP3,但在我的项目中,我需要提供AIFF和WAV输入的所有三种格式(AIFF,WAV和MP3).可能吗?
我希望能够合并多个midi文件和wav文件,并在Python或C中生成单个wav或mp3文件.是否有一个库可以执行此操作?我是否必须首先将MIDI转换为wav,然后将wav文件合并在一起?我知道有Python的库可以做到这一点,但我不知道是否有办法用MIDI和wav做到这一点.
此外,这项操作有多贵?我宁愿在Python中这样做,但如果用C语言做得更好,我就知道C所以我也会对此持开放态度.
谢谢,
大卫
我已经成功地使用 FFmpeg 加载压缩音频文件并使用我编写的一些代码查询它们的 channel_layouts:
AVFormatContext* fmtCxt = nullptr;
avformat_open_input( &fmtCxt, "###/440_sine.wav", nullptr, nullptr );
avformat_find_stream_info( fmtCxt, nullptr );
av_find_best_stream( fmtCxt, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0 );
AVCodecContext* codecCxt = fmtCxt->streams[ret]->codec;
AVCodec* codec = avcodec_find_decoder( codecCxt->codec_id );
avcodec_open2( codecCxt, codec, nullptr );
std::cout << "Channel Layout: " << codecCxt->channel_layout << std::endl;
av_dump_format( fmtCxt, 0, "###/440_sine.wav", 0 );
Run Code Online (Sandbox Code Playgroud)
为简洁起见,我删除了所有错误检查。但是,对于 Microsoft WAV 文件(单声道或立体声),AVCodecContext::channel_layout成员始终为 0 - 尽管ffprobe并且av_dump_format(..)两者都返回有效信息:
Input #0, wav, from '###/440_sine.wav':
Duration: 00:00:00.01, bitrate: 740 kb/s
Stream …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个游戏,我需要同时播放许多声音我知道 v.basic 或者只是知道 func。PlaySound()运行.wav声音。
问题是SND_ASYNC我不能一次播放多个声音,但第一个播放的声音在中间跳过并播放下一个声音。
有什么方法(简单易懂)可以同时播放多个声音?
我正在寻找批量转换大量文件到音频文件ffmpeg用于一个名为的游戏Star Wars: Jedi Knight: Dark Forces II.我遇到的问题ffmpeg似乎是做了一些Jedi Knight无法播放声音文件的事情.
Jedi Knight接受PCM WAV各种范围的普通旧文件,从5khz到96khz,8和16位,单声道和立体声.这听起来简单明了.除非是使用创建WAV文件MS Sound Recorder,Jedi Knight否则无法播放.猜测是它在标题或其他东西上添加了额外的东西.但它可以播放WAV由其创建的文件Audacity,GoldWave或ModPlug Tracker仅举几例.
那为什么不ffmpeg呢?我使用错误的编解码器或参数吗?我从游戏中获取了原始声音文件并执行了以下操作:
ffmpeg -i "orig_thrmlpu2.wav" -f wav -acodec pcm_s16le -ar 22050 -ac 1 "ffmpeg_thrmlpu2.wav"
Run Code Online (Sandbox Code Playgroud)
该ffmpeg版本不在游戏中播放.ffprobe表明该ffmpeg版本有许多Metadata,其中original没有.我应该使用什么样的参数来尝试获得与WAV原始格式相同的格式?你要知道,-ar,-ac而bits不是重要的组成部分.
以下是您要检查的文件:http://www.edwardleuf.org/Games/JK/thrmlpu2.zip
我正在尝试运行一个处理 wav 文件的 python 代码。它要求给出样本中的文件长度。经过研究,我发现了这个命令
>>>import os
>>>b=os.path.getsize('/somepath')
>>>b
Run Code Online (Sandbox Code Playgroud)
但我不确定它是否会给出样本结果。
任何人都可以帮忙吗?