经过研究和大量的试验和错误,我已经到了一个点,我可以构建一个谱图,我认为它具有正确和错误的元素.
1.首先,我将.wav文件读入字节数组并仅提取数据部分.
2.我将字节数组转换为双数组,取左右声道的平均值.我还注意到1个通道的1个样本由2个字节组成.所以,4个字节变为1个双精度.
3.对于某个窗口大小为2的功率,我从这里应用FFT 并得到频域的幅度.这是谱图图像的垂直条带.
4.我使用相同的窗口大小重复执行此操作并重叠整个数据并获得频谱图.
以下是将.wav读入双数组的代码
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
public class readWAV2Array {
private byte[] entireFileData;
//SR = sampling rate
public double getSR(){
ByteBuffer wrapped = ByteBuffer.wrap(Arrays.copyOfRange(entireFileData, 24, 28)); // big-endian by default
double SR = wrapped.order(java.nio.ByteOrder.LITTLE_ENDIAN).getInt();
return SR;
}
public readWAV2Array(String filepath, boolean print_info) throws IOException{
Path path = Paths.get(filepath);
this.entireFileData = Files.readAllBytes(path);
if (print_info){
//extract format
String format = new …Run Code Online (Sandbox Code Playgroud) 下面是代码模板,在/*下面写你的代码*/是我自己的代码.模板应该是正确的但我的代码有问题.
我的算法是迭代str直到找到空字符.然后比较每个字符,如果它们相同则迭代str和sub,否则设置继续迭代str并重置为substr的第一个字符.
#include <stdio.h>
int findSubstring(char *str, char *substring);
int main()
{
char str[40], substr[40];
printf("Enter the string: ");
gets(str);
printf("Enter the substring: ");
gets(substr);
printf("findSubstring(): %d\n", findSubstring(str, substr));
return 0;
}
int findSubstring(char *str, char *substr)
{
/* write your code here */
int i = 0, j = 0;
while ((str[j] != '\0')||(substr[i] != '\0')) {
if (substr[i] != str[j]) {
j++;
i = 0;
}
else {
i++;
j++;
}
}
if (substr[i] == '\0')
return 1; …Run Code Online (Sandbox Code Playgroud)