我正在尝试使用本指南在C#中播放MP3文件:http: //www.crowsprogramming.com/archives/58
我正在列出所有内容,但我仍然无法在我的C#程序中播放任何音乐.谁能告诉我我做错了什么?
static void Main(string[] args)
{
WMPLib.WindowsMediaPlayer a = new WMPLib.WindowsMediaPlayer();
a.URL = "song.mp3";
a.controls.play();
}
Run Code Online (Sandbox Code Playgroud)
音乐文件"Song"位于bin文件夹中.
我正在编写一个C++库,用于在不同格式/编解码器之间解码和编码音频.我有一个例程,可以在加载所需的编解码器库之前快速检测格式.
对于WAV文件,可以在文件开头简单地查找ASCII值"RIFF"和"WAVE".这同样适用于FLAC,我们可以简单地读取前4个字节,即"fLaC".
但是如何快速检测文件是否是MP3?我不能依赖文件扩展名.我也无法尝试解码第一个MP3帧,因为文件开头可能还有其他数据(例如:ID3,封面图片等).
我怎样才能检测到(最好用Python)可以用不同比特率编码的重复MP3文件(但它们是同一首歌)和可能不正确的ID3标签?
我知道我可以对文件内容进行MD5校验和,但这对于不同的比特率不起作用.我不知道ID3标签是否对生成MD5校验和有影响.我应该重新编码具有不同比特率的MP3文件,然后我可以进行校验和吗?您有什么推荐的吗?
如果浏览器可以播放MP3,那么我将使用音频标签播放文件.如果没有,我将不得不加载一个Flash播放器.
在Windows中,是否有一种简单的方法(即您可以在单个命令行上键入的内容)只播放几个.mp3文件然后自行退出?
例如,wmplayer似乎在完成后似乎没有退出,迫使用户抓住它并每次点击它关闭它.(wmplayer 11似乎也奇怪地重复一些文件,如果你传递一个列表.)(旧的(1990年代)版本的'mplayer'用于支持'/ close'命令行选项,但它似乎不起作用wmplayer 11.)
我更喜欢使用每个人都会在他们的机器上拥有的东西(比如wmplayer,quicktime ......)
简短版本:将MP3(并且理想情况下是AAC/Ogg/WMA)中的数据编码成Java阵列或ByteBuffer的最佳方法是什么?
我正在整理一个程序,它将减慢和加速声音文件作为其功能之一.这适用于WAV文件,这是一个标题加上需要发送到扬声器的确切二进制数据,现在我需要为MP3实现它(理想情况下,这也支持AAC,Ogg和WMA,但是那些不太受欢迎的格式,这不是必需的).Android没有公开接口来解码MP3而不播放它,所以我需要创建该接口.
虽然我对其他人开放,但有三种选择可供选择:
1)编写我自己的解码器.我已经有一个功能帧检测器,我希望用于选项(3),现在应该只需要实现霍夫曼解码表.
2)使用JLayer或等效的Java库来处理解码.我不清楚这里的许可证后果是什么.
3)连接到libmedia库/ MediaPlayerService.这就是SoundPool所做的事情,而且该服务的使用量使我相信,虽然它正式不稳定,但实现并不是任何地方.这意味着编写JNI代码以连接到服务,但我发现这是一个很深的兔子洞.在表面上,我遇到了sp <>模板的问题.
我的问题非常相似: 我可以用PHP提供MP3文件吗? 基本上我试图保护mp3文件免受直接下载,因此用户必须先通过php才能获得首次验证.这是我的代码:
header('Content-type: audio/mpeg');
header('Content-length: ' . filesize($file));
header('X-Pad: avoid browser bug');
Header('Cache-Control: no-cache');
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
readfile($file);
Run Code Online (Sandbox Code Playgroud)
这是我的问题:文件只占一开始的一小部分(通过浏览器中的Quicktime)然后停止 - Quicktime似乎认为文件的长度只与它设法下载的块一样长.当我重新加载时 - 它会播放一个稍微大一点的块 - 无论它设法下载到那一点.
这是我发送的标题中的问题吗?我该如何传输这样的文件?如果swf正在从该文件中读取,这是一个问题吗?
谢谢!
谢谢你们所有答案.虽然这些事情都没有解决问题,但很多都让我朝着正确的方向前进.非常感激.有关完整解决方案,请参阅下面的答案
我正在使用HTML5网络音频API来分析歌曲,并在平均声音频率低于某个值时创建标记.使用现有的AudioNode基础设施,我设法做到这一点,但只分析声音,并且仅在播放歌曲时.
然而,我想要的是提前分析歌曲,这样我就可以提取静音标记,并将它们变成CUE按钮,用户可以使用这些按钮在整首歌曲中移动.
显然,首先依靠播放整首歌来进行分析是很慢的,特别是如果这首歌是50分钟的播客.我尝试将playbackRate加速到10倍,但这没有用.
我认为解决方案在于跳过Web音频API,并分析原始ArrayBuffer,但是,我真的不知道从哪里开始.
建议?想法?
我想做一些实时的声音处理,我听说过supercollider
它看起来很棒,但我想坚持使用python,因为"普通"编程是个问题.
有没有办法将python脚本作为模块加载到supercollider或oposite?
意味着将库导入我的python代码并使用supercollider功能?
我没有在网上找到太多关于它的信息,所以任何帮助都会很棒.
我需要下载一个mp3文件,但我只需要歌曲的前20秒(如果歌曲少于20秒,则需要整首歌曲).
这就是我下载整首歌的方式:
func downloadSong(audioUrl: URL) {
let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let destinationUrl = documentsDirectoryURL.appendingPathComponent(audioUrl.lastPathComponent)
URLSession.shared.downloadTask(with: audioUrl, completionHandler: { (location, response, error) -> Void in
guard let location = location, error == nil else { return }
do {
try FileManager.default.moveItem(at: location, to: destinationUrl)
// song available in destinationUrl
} catch let error as NSError {
}
}).resume()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在20秒后停止下载?我知道我可以下载整首歌然后剪下来,但我想要更高效,特别是如果这首歌很长.
mp3 ×10
audio ×4
decoding ×2
header ×2
html5 ×2
javascript ×2
python ×2
android ×1
arraybuffer ×1
batch-file ×1
c# ×1
command-line ×1
detect ×1
download ×1
duplicates ×1
file ×1
filestream ×1
flac ×1
id3 ×1
ios ×1
nsurlsession ×1
php ×1
readfile ×1
windows ×1