我必须将 matlab 代码转换为 Android。此 matlab 代码包含能量计算,如下所示:
首先我将音频文件读入矩阵 x,将采样频率读入 fs,然后计算每个窗口的能量:
[x, fs] = wavread('C:\1359873105438.wav')
energy=energy+sum(x(1:fs).^2)*Tss;
我不确定如何将其转换为 Android/Java。
你以前经历过吗?请帮我解决这个问题。
在此先感谢您的帮助
我必须将 matlab 代码转换为 Android。此 matlab 代码包含能量计算,如下所示:
首先我将音频文件读入矩阵 x,将采样频率读入 fs,然后计算每个窗口的能量:
[x, fs] = wavread('C:\1359873105438.wav')
energy=energy+sum(x(1:fs).^2)*Tss;
我不确定如何将其转换为 Android/Java。
你以前经历过吗?请帮我解决这个问题。
在此先感谢您的帮助
本质上,您必须执行以下操作:
double x;//Read Wave in here
for (i=0;i<x.length;i++)
{
energy+=Tss*(x[i]^2);
}
如何阅读从本文借来的波形文件。
public class ReadExample
{
public static void main(String[] args)
{
try
{
// Open the wav file specified as the first argument
WavFile wavFile = WavFile.openWavFile(new File(args[0]));
// Get the number of audio channels in the wav file
int numChannels = wavFile.getNumChannels();
// Create a buffer of 100 frames
double[] buffer = new double[100 * numChannels];
int framesRead;
do
{
// Read frames into buffer
framesRead = wavFile.readFrames(buffer, 100);
// Loop through frames and look for minimum and maximum value
for (int s=0 ; s<framesRead * numChannels ; s++)
{
//This is where you put the your code in
}
}
while (framesRead != 0);
// Close the wavFile
wavFile.close();
}
catch (Exception e)
{
System.err.println(e);
}
}
}
底线是,没有像 matlab 那样干净的方法。甚至没有直接读取波形文件的功能。尽管如此,使用网站提供的WavFile类还是比较简单的。