gpt4 book ai didi

java - 缓冲区从文件读取音频数据给出零

转载 作者:行者123 更新时间:2023-12-01 14:19:21 25 4
gpt4 key购买 nike

在我的应用程序中,我需要首先从特定文件中读取音频数据,然后将其存储在缓冲区中。之后我将用它进行处理和其他东西。问题是,当我尝试打印其内容时,它给出 0:

String data = String.valueOf(buffer[50]+"     "+buffer[100]+"     "+buffer[200]+buffer[599]);
display.setText(data);

打印上面的语句给出全零!...为什么???

这是我的代码:

   public void readAudioDataFromFile() {

String filePath2 = "/storage/sdcard0/Sounds/originalFile.pcm";
FileInputStream ins = null;
File file = new File(filePath2);
int size = (int) file.length();
byte [] buffer=new byte [size];
try {
ins= new FileInputStream(filePath2);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
ins.read(buffer, 0,size);
int count =0;
for(int i=0; i<buffer.length; i++)
{
if(buffer[i]!=0)
count++;
}
String data = String.valueOf((count);
display.setText(data);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

奇怪的是,当我尝试以下语句时:

  int x= ins.read(buffer, 0,size);

当我打印x时,它给出了一个等于文件大小的数字,

此外,当我尝试打印“count”时,正如您在我的代码中看到的那样,它也给出了输出!

我的意思是,这一切不应该意味着缓冲区不为空吗???为什么如果它不为空,为什么当我尝试打印它的元素时它给了我零???

最佳答案

目前还不清楚问题是什么,但可能是由以下原因引起的:

ins.read(buffer, 0,size);

您忽略了read调用的结果,它会告诉您实际有多少字节被读入缓冲区。即使文件大小为 size,假设您将读取 size 字节也是不正确的。

执行此操作的正确方法是循环,直到读完整个文件......如下所示:

       int pos = 0;
while (pos < size) {
pos += ins.read(buffer, pos, size - pos);
}
<小时/>

至于为什么你得到全零,我认为最简单(也是最有可能)的解释是你正在读取的文件包含全零。

关于java - 缓冲区从文件读取音频数据给出零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17757994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com