我试图克隆不和谐,我发现他们使用 ogg 格式的音频(我认为),我试图获取音频持续时间以存储在数据库中。
关于获取 OGG 音频持续时间的 stackoverflow 解决方案,我发现很有趣。该方法涉及查找文件末尾,找到最后一个 Ogg 页标头,并读取其颗粒位置。
func getOggDurationMs(reader io.Reader) (int64, error) { // Read the entire Ogg file into a byte slice data, err := io.ReadAll(reader) if err != nil { return 0, fmt.Errorf("error reading Ogg file: %w", err) } // Search for the "OggS" signature and calculate the length var length int64 for i := len(data) - 14; i >= 0 && length == 0; i-- { if data[i] == 'O' && data[i 1] == 'g' && data[i 2] == 'g' && data[i 3] == 'S' { length = int64(readLittleEndianInt(data[i 6 : i 14])) } } // Search for the "vorbis" signature and calculate the rate var rate int64 for i := 0; i我决定在这里分享它,我发现这个实现非常酷,也许可以帮助其他人
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3