我正在创建一个使用SoundCloud API来流式传输艺术家视频的Web应用程序。我知道如何获得波形PNG图像(例如http://w1.sndcdn.com/fxguEjG4ax6B_m.png
),但实际上我需要某种波形数据(在歌曲中它是高时还是低时?)。
我无法访问像LAME这样的音频库,因为我的网络托管不允许它。是否可能
答案 0 :(得分:6)
Soundcloud开始提供浮点数,但它尚未正式发布。只要一点点技巧,当你有PNG时:
DROP PROCEDURE IF EXISTS CreateNativeUser;
delimiter $$
CREATE PROCEDURE CreateNativeUser (p_email varchar(100), p_pass varchar(32))
BEGIN
insert into users(email) values (p_email);
insert into user_logins_native() values(???, p_email, p_pass);
commit;
END $$
delimiter ;
更改" w1 "通过" wis "和" png "通过" json ":
https://w1.sndcdn.com/XwA2iPEIVF8z_m.png
你明白了!
答案 1 :(得分:4)
可以解析波形PNG图像以将其转换为点阵列。图像是垂直对称的,为了找到峰值,您只需要检查alpha值来计算它从图像顶部有多少不透明像素。这是为widget和Next SoundCloud上的波形呈现方式。
在PHP中,您可以使用ImageMagick或GD Graphics Library来读取这些值,在Javascript中,可以将图像放到画布对象上,然后从那里检查图像数据。我不会过多地了解这些细节,但如果你遇到困难,你当然可以提出另一个问题。
答案 2 :(得分:1)
虽然没有官方方法直接从SoundCloud API请求获取原始波形数据,但有一种方法可以导出SoundCloud在非官方端点(又名:https://wis.sndcdn.com/XwA2iPEIVF8z_m.json
之类的东西)中显示的完全相同的数据。 PHP使用这样的代码。只需更改$image_file
的值即可匹配任何SoundCloud 1800宽280高PNG图像,您就可以了:
$source_width = 1800;
$source_height = 140;
$image_file = 'https://w1.sndcdn.com/XwA2iPEIVF8z_m.png';
$image_processed = imagecreatefrompng($image_file);
imagealphablending($image_processed, true);
imagesavealpha($image_processed, true);
$waveform_data = array();
for ($width = 0; $width < $source_width; $width++) {
for ($height = 0; $height < $source_height; $height++) {
$color_index = @imagecolorat($image_processed, $width, $height);
// Determine the colors—and alpha—of the pixels like this.
$rgb_array = imagecolorsforindex($image_processed, $color_index);
// Peak detection is based on matching a transparent PNG value.
$match_color_index = array(0, 0, 0, 127);
$diff_value = array_diff($match_color_index, array_values($rgb_array));
if (empty($diff_value)) {
break;
}
} // $height loop.
// Value is based on the delta between the actual height versus detected height.
$waveform_data[] = $source_height - $height;
} // $width loop.
// Dump the waveform data array to check the values.
echo '<pre>';
print_r($waveform_data);
echo '</pre>';
这种方法的好处是虽然https://wis.sndcdn.com/
URL很有用,但是没有人知道SoundCloud是否会改变来自它的数据的结构。从官方波形PNG中获取数据提供了一些长期稳定性,因为它们不会在没有公平警告SoundCloud API最终用户的情况下更改PNG图像。
另请注意,虽然$source_width
为1800,但$source_height
为140,因为SoundCloud PNG文件高280像素,下半部分基本上只是上半部分的翻转/镜像副本。因此,仅测量0到150的值将为您提供必要的波形数据值。
答案 3 :(得分:0)
很抱歉碰到一个旧帖子 - 以防万一你正在寻找类似的东西并且在这篇文章中发现:现在可以按照这个链接:Waveforms, Let's Talk About Them。
这篇帖子发布后不久就发布了 - 所以再次为一个旧帖子道歉。
答案 4 :(得分:-1)
对不起,但是那种东西没有API。在soundcloud上,波形在上传时生成,数据被抛出。