首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从.wav和.flac文件中提取RIFF数据

从.wav和.flac文件中提取RIFF数据
EN

Stack Overflow用户
提问于 2022-10-15 22:52:31
回答 1查看 61关注 0票数 2

Wave文件可以包含非官方元数据,例如取样器块- "smpl":https://sites.google.com/site/musicgapi/technical-documents/wav-file-format#smpl

这些是用于音频循环播放器和采样器避免加载多个样本。

我这里有一份这样的档案:

https://github.com/studiorack/basic-harmonica/blob/bf42d5bab7470cc201e3c4b6dee7925b19db6bff/samples/harmonica_1.wav

以及使用正式的flac命令行工具:flac harmonica_1.wav --keep-foreign-metadata转换的flac文件。

https://github.com/studiorack/basic-harmonica/blob/main/samples/harmonica_1.flac

在运行这些工具时,我可以确认每个文件中都存在元数据:

https://hexfiend.com

但是,我确实看到了字节数上的不同(我相信在多个地方插入了flac的riff )。

我还可以将.flac文件转换回.wav,它的大小相同,并包含元数据:flac harmonica_1.flac --keep-foreign-metadata

在使用其他工具时,我可以读取数据:

代码语言:javascript
复制
$ 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 : 0

https://linux.die.net/man/1/sndfile-info

这只适用于.wav文件。对于libsndfile有一个特性请求来支持flac文件中的“smpl”:https://github.com/libsndfile/libsndfile/issues/59

代码语言:javascript
复制
$ metaflac ./har.flac --list
smpl<aQ@�1u�METADATA block #7
  type: 2 (APPLICATION)
  is last: false
  length: 20
  application ID: 72696666
  data contents:

https://xiph.org/flac

但是,如您所见,返回的结果是不同的。我希望以相同的格式返回一个.wav和.flac RIFF 'smpl‘数据,这样我就可以验证结果匹配。

https://exiftool.org似乎是实现这一目标的工具。但它也在.wav和.flac之间产生了不一致的结果:

代码语言:javascript
复制
$ 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

以及亚麻

代码语言:javascript
复制
$ 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文件,我如何能够一致地读取这些数据?

EN

回答 1

Stack Overflow用户

发布于 2022-10-21 05:25:13

我得到了exiftool的创建者的帮助:https://exiftool.org/forum/index.php?topic=14064.0

简而言之,flac riff块存储在自定义元数据格式中,exiftool可以解析这种元数据格式,但需要一个自定义的.ExifTool_config文件。

创建者在提交中添加了必要的更改:https://github.com/exiftool/exiftool/commit/5c2467fa6cdb38233793884e80cee9abf4da48e6#diff-0c24c6846e8207ad8d090e564fdc366dad6386f2ef7c51eea5aa0d72d970ff11

ExifTool 12.49的最新版本现在解析了.wav和.flac循环数据!在FLAC音频文件中解码'riff‘元数据块“https://exiftool.org/history.html

用法:

代码语言:javascript
复制
exiftool ./har.wav
exiftool ./har.flac

输出:

代码语言:javascript
复制
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 s
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74083551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档