Wave文件可以包含非官方元数据,例如取样器块- "smpl":https://sites.google.com/site/musicgapi/technical-documents/wav-file-format#smpl。
这些是用于音频循环播放器和采样器避免加载多个样本。
我这里有一份这样的档案:
以及使用正式的flac命令行工具:flac harmonica_1.wav --keep-foreign-metadata转换的flac文件。
https://github.com/studiorack/basic-harmonica/blob/main/samples/harmonica_1.flac
在运行这些工具时,我可以确认每个文件中都存在元数据:

但是,我确实看到了字节数上的不同(我相信在多个地方插入了flac的riff )。
我还可以将.flac文件转换回.wav,它的大小相同,并包含元数据:flac harmonica_1.flac --keep-foreign-metadata
在使用其他工具时,我可以读取数据:
$ sndfile-info har.wav
smpl : 60
Manufacturer : 0
Product : 0
Period : 20833 nsec
Midi Note : 64
Pitch Fract. : 0
SMPTE Format : 0
SMPTE Offset : 00:00:00 00
Loop Count : 1
Cue ID : 131072 Type : 0 Start : 12707 End : 47221 Fraction : 0 Count : 0
Sampler Data : 0https://linux.die.net/man/1/sndfile-info
这只适用于.wav文件。对于libsndfile有一个特性请求来支持flac文件中的“smpl”:https://github.com/libsndfile/libsndfile/issues/59。
$ metaflac ./har.flac --list
smpl<aQ@�1u�METADATA block #7
type: 2 (APPLICATION)
is last: false
length: 20
application ID: 72696666
data contents:但是,如您所见,返回的结果是不同的。我希望以相同的格式返回一个.wav和.flac RIFF 'smpl‘数据,这样我就可以验证结果匹配。
https://exiftool.org似乎是实现这一目标的工具。但它也在.wav和.flac之间产生了不一致的结果:
$ exiftool -a -G1 -s ./har.wav
[ExifTool] ExifToolVersion : 12.42
[System] FileName : har.wav
[System] Directory : .
[System] FileSize : 95 kB
[System] FileModifyDate : 2022:10:11 21:16:37-07:00
[System] FileAccessDate : 2022:10:15 14:39:46-07:00
[System] FileInodeChangeDate : 2022:10:15 14:39:50-07:00
[System] FilePermissions : -rw-r--r--
[File] FileType : WAV
[File] FileTypeExtension : wav
[File] MIMEType : audio/x-wav
[RIFF] Encoding : Microsoft PCM
[RIFF] NumChannels : 1
[RIFF] SampleRate : 48000
[RIFF] AvgBytesPerSec : 96000
[RIFF] BitsPerSample : 16
[RIFF] Manufacturer : 0
[RIFF] Product : 0
[RIFF] SamplePeriod : 20833
[RIFF] MIDIUnityNote : 64
[RIFF] MIDIPitchFraction : 0
[RIFF] SMPTEFormat : none
[RIFF] SMPTEOffset : 00:00:00:00
[RIFF] NumSampleLoops : 1
[RIFF] SamplerDataLen : 0
[RIFF] SamplerData : (Binary data 20 bytes, use -b option to extract)
[RIFF] UnshiftedNote : 64
[RIFF] FineTune : 0
[RIFF] Gain : 0
[RIFF] LowNote : 0
[RIFF] HighNote : 127
[RIFF] LowVelocity : 0
[RIFF] HighVelocity : 127
[RIFF] Comment : Recorded on 7/10/2022 in Edison.
[RIFF] Software : FL Studio 20
[Composite] Duration : 0.99 s以及亚麻
$ exiftool -a -G1 -s ./har.flac
[ExifTool] ExifToolVersion : 12.42
[System] FileName : har.flac
[System] Directory : .
[System] FileSize : 83 kB
[System] FileModifyDate : 2022:10:11 20:59:37-07:00
[System] FileAccessDate : 2022:10:15 14:44:12-07:00
[System] FileInodeChangeDate : 2022:10:15 14:42:26-07:00
[System] FilePermissions : -rw-r--r--
[File] FileType : FLAC
[File] FileTypeExtension : flac
[File] MIMEType : audio/flac
[FLAC] BlockSizeMin : 4096
[FLAC] BlockSizeMax : 4096
[FLAC] FrameSizeMin : 3442
[FLAC] FrameSizeMax : 6514
[FLAC] SampleRate : 48000
[FLAC] Channels : 1
[FLAC] BitsPerSample : 16
[FLAC] TotalSamples : 47222
[FLAC] MD5Signature : f89646c0d3056ec38c3e33ca79299253
[Vorbis] Vendor : reference libFLAC 1.4.1 20220922
[Composite] Duration : 0.98 s无论是.flac文件还是.wav文件,我如何能够一致地读取这些数据?
发布于 2022-10-21 05:25:13
我得到了exiftool的创建者的帮助:https://exiftool.org/forum/index.php?topic=14064.0
简而言之,flac riff块存储在自定义元数据格式中,exiftool可以解析这种元数据格式,但需要一个自定义的.ExifTool_config文件。
ExifTool 12.49的最新版本现在解析了.wav和.flac循环数据!在FLAC音频文件中解码'riff‘元数据块“https://exiftool.org/history.html
用法:
exiftool ./har.wav
exiftool ./har.flac输出:
Encoding : Microsoft PCM
Num Channels : 1
Sample Rate : 48000
Avg Bytes Per Sec : 96000
Bits Per Sample : 16
Manufacturer : 0
Product : 0
Sample Period : 20833
MIDI Unity Note : 64
MIDI Pitch Fraction : 0
SMPTE Format : none
SMPTE Offset : 00:00:00:00
Num Sample Loops : 1
Sampler Data Len : 0
Sampler Data : (Binary data 20 bytes, use -b option to extract)
Unshifted Note : 64
Fine Tune : 0
Gain : 0
Low Note : 0
High Note : 127
Low Velocity : 0
High Velocity : 127
Acidizer Flags : One shot
Root Note : High C
Beats : 2
Meter : 4/4
Tempo : 0
Comment : Recorded on 7/10/2022 in Edison.
Software : FL Studio 20
Duration : 0.87 shttps://stackoverflow.com/questions/74083551
复制相似问题