https://wis.sndcdn.com/XwA2iPEIVF8z_m.json
虽然没有官方方法可以直接从 SoundCloud API 请求中获取原始波形数据,但有一种方法可以使用这样的代码在 PHP中的非官方端点(又名:类似的东西)中获取 SoundCloud 显示的完全相同的数据。只需更改值$image_file
以匹配您拥有的任何 SoundCloud 1800 宽 x 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 之间的值即可为您提供必要的波形数据值。