android - 通过 FTP 将 .mp3 文件下载到我的应用程序会更改文件的质量
问题描述
我的小游戏应用程序使用 FTP 下载一些 .mp3 声音。自从我从免费虚拟主机升级后,质量问题就出现了。播放声音时带有一些噪音,类似于电视出现信号问题时的声音。我没有对代码进行任何更改,文件正在正确下载,下载后文件大小、持续时间和比特率没有改变。
我已经检查过的内容:
- 所有设备都出现问题
- 在浏览器(PC 和手机)中播放的声音都可以
- 从网站下载到 PC 或手机的声音都可以
- 之前在同一应用程序屏幕(或应用程序中的任何其他位置)上播放的免费虚拟主机下载的声音都可以
- 旧声音(在应用程序中正常工作)重新上传到新站点并由应用程序重新下载会产生相同的问题
因此,实际上只有我的应用程序从新服务器下载的文件质量很差。
// This is only a part of code, but it's working correctly for more than 2 years now
for (FTPFile file : ftpFiles) {
String name = file.getName();
OutputStream outputStream;
if (name.endsWith(".zip") && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// Application auto-update
if (Build.VERSION.SDK_INT >= 23 && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED)
{
continue;
}
outputStream = new FileOutputStream(path);
editor.putBoolean("newAppAvailable", true).apply();
} else {
File localFile = new File(LoadingScreen.this.getFilesDir() + getResources().getString(R.string.slash) + name);
outputStream = new BufferedOutputStream(new FileOutputStream(localFile));
}
ftp.retrieveFile(name, outputStream);
outputStream.close();
}
我能想到的唯一原因是文件的数量。下载文件量是否有可能增加?过去有人遇到过这样的问题吗?
编辑:所以,至少我找到了复制的结果。原始示例文件长度为 15.1s。在音乐程序中播放复制的文件显示相同的长度并持续 15.1 秒。但是使用 Goldwave 我发现复制的文件被加速并在 13.8s 结束!
EDIT2:我还尝试在应用程序中压缩所有声音并解压缩 - 这令人难以置信,但只有一个声音能够解压缩,完全损坏......此外,通过 PC 看不到 zip 文件。
解决方案
默认文件类型可能是 ASCII,这会导致问题。解决方法是连接后更改:
ftp.setFileType(FTP.BINARY_FILE_TYPE);
推荐阅读
- sql - 检查视图列是否可能包含 null
- javascript - 用玩笑进行测试时,setInterval 不起作用
- python - 使用 Django 的可扩展列表
- c# - 在 foreach 循环之外使用 IEnumerable 列表
- ios - 如何快速为每个循环添加新行?
- vue.js - 在 VueRouter 中访问 this.$router.params 的问题
- docker - 防止自动重启失败的容器以登录以进行调试
- cmd - 等待 Outlook 通过命令提示符加载
- c++ - OpenMP:确定它们是否是素数
- sitefinity - Sitefinity 新闻项目在特定日期发布/取消发布不起作用