45 lines
1002 B
Go
45 lines
1002 B
Go
package ncmcrypt
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
func EmbedMetadata(audio []byte, format NcmFormat, title, artist, album string, coverData []byte) ([]byte, error) {
|
|
tmpFile, err := os.CreateTemp("", "ncmdump-embed-*")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("create temp file: %w", err)
|
|
}
|
|
tmpPath := tmpFile.Name()
|
|
defer os.Remove(tmpPath)
|
|
|
|
if _, err := tmpFile.Write(audio); err != nil {
|
|
tmpFile.Close()
|
|
return nil, fmt.Errorf("write temp: %w", err)
|
|
}
|
|
tmpFile.Close()
|
|
|
|
ncm := &NeteaseCloudMusic{
|
|
mPng: [8]byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A},
|
|
mFormat: format,
|
|
mDumpFilePath: tmpPath,
|
|
mImageData: coverData,
|
|
mMetadata: &NeteaseClousMusicMetadata{
|
|
mName: title,
|
|
mArtist: artist,
|
|
mAlbum: album,
|
|
},
|
|
}
|
|
|
|
if _, err := ncm.FixMetadata(false); err != nil {
|
|
return nil, fmt.Errorf("write metadata: %w", err)
|
|
}
|
|
|
|
result, err := os.ReadFile(tmpPath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("read result: %w", err)
|
|
}
|
|
|
|
return result, nil
|
|
}
|