脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python实现将wav转amr,并转换成hex数组

Python实现将wav转amr,并转换成hex数组

2023-05-07 16:14eric_pyt@qq.com Python

这篇文章主要介绍了Python实现将wav转amr,并转换成hex数组方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

将wav转amr,并转换成hex数组

将wav文件快速转为amr,同时将arm文件转为16进制数组,保存在对应.h文件,供嵌入式设备使用(无文件系统产品(⊙o⊙)哦)

直接上代码

generate_audio_file.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
from __future__ import print_function
from builtins import range
import os
import wave
import struct
import time
import re
import subprocess
import binascii
# eric 2020年7月10日
# wav文件转PCM数组
def get_wave_array_str(filename, target_bits):
    wave_read = wave.open(filename, "r")
    array_str = "// start\n\t"
    nchannels, sampwidth, framerate, nframes, comptype, compname = wave_read.getparams()
    sampwidth *= 8
    for i in range(wave_read.getnframes()):
        val, = struct.unpack("<H", wave_read.readframes(1))
        scale_val = (1 << target_bits) - 1
        cur_lim   = (1 << sampwidth) - 1
        # scale current data to 8-bit data
        val       = val * scale_val / cur_lim
        val       = int(val + ((scale_val + 1) // 2)) & scale_val
        array_str += "0x%02x, " % (val)
        if (i + 1) % 16 == 0:
            array_str += "\n\t"
    return array_str
# PCM 数组合并
def gen_wave_table(wav_file_list, target_file_name, scale_bits=8):
    with open(target_file_name, "w") as audio_table:
        print('#include <stdio.h>', file=audio_table)
        print("// time:{}".format(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))), file=audio_table)
        print('const unsigned char audio_table[] = {', file=audio_table)
        for wav in wav_file_list:
            print("processing: {}".format(wav))
            print('//name:{}\n'.format(wav), file=audio_table)
            print(get_wave_array_str(filename=wav, target_bits=scale_bits), file=audio_table)
        print('};\n', file=audio_table)
    print("Done...")
# 获取wav文件信息
def get_wave_info(filename):
    wave_read = wave.open(filename, "r")
    nchannels, sampwidth, framerate, nframes, comptype, compname = wave_read.getparams()
    print('nchannels:{}'.format(nchannels))
    print('sampwidth:{}'.format(sampwidth))
    print('framerate:{}Hz'.format(framerate))
    print('nframes:{}'.format(nframes))
    print('comptype:{}'.format(comptype))
    print('compname:{}'.format(compname))
    return framerate
# 二进制文件转数组
def file2array(filename,h_filename=None):
    path, name = os.path.split(filename)
    if h_filename is None:
        h_filename = os.path.join(path, name.split('.')[0] +'.h')
    array_str = '\n//total len:{} bytes\n'.format(os.path.getsize(filename))
    array_str += 'const unsigned char '+name.split('.')[0]+'[]={\n\t'
    # print(array_str)
    h_file = open(h_filename, "w")
    file = open(filename, 'rb')
    try:
        while True:
            chunk = file.read(16*32)
            if not chunk:
                break
            for i in range(len(chunk)):
                array_str += "0x%02x, " % (chunk[i])
                if (i + 1) % 16 == 0:
                    array_str += "\n\t"
            # print('get:{}'.format(binascii.b2a_hex(chunk)))
    except:
        print('read ERR')
    finally:
        print('read file done!')
        array_str += '\n};\r\n'
        # print('array='+array_str)
        print(array_str, file=h_file)
    h_file.close()
    file.close()
    return 0
# ffmpeg路径
ffpeg_path = 'D:/Program Files (x86)/QveAudio/'
# amr文件转MP3
def amr2mp3(amr_path,mp3_path=None):
    path, name = os.path.split(amr_path)
    if name.split('.')[-1]!='amr':
        print('not a amr file')
        return 0
    if mp3_path is None or mp3_path.split('.')[-1]!='mp3':
        mp3_path = os.path.join(path, name.split('.')[0] +'.mp3')
    error = subprocess.call(['ffmpeg/bin/ffmpeg','-i',amr_path,mp3_path])
    print('ERR:'+error)
    if error:
        return 0
    print ('success')
    return mp3_path
# wav文件转amr,wav必须为8000Hz
def wave2amr(wave_path,amr_path=None):
    path, name = os.path.split(wave_path)
    if name.split('.')[-1]!='wav':
        print ('not a wave file')
        return 0
    if amr_path is None or amr_path.split('.')[-1]!='amr':
        amr_path = os.path.join(path, name.split('.')[0] +'.amr')
    error = subprocess.call([ffpeg_path+'ffmpeg','-i',wave_path,'-y',amr_path])
    print('ERR:{}'.format(error))
    if error:
        return 0
    print ('amr success')
    return amr_path
# wav 格式化为8000Hz
def wave2Hz8000(wave_path,out_path=None):
    path, name = os.path.split(wave_path)
    if name.split('.')[-1]!='wav':
        print ('not a wave file')
        return 0
    if out_path is None or wave_path.split('.')[-1]!='wav':
        out_path = os.path.join(path, name.split('.')[0] +'_8k.wav')
    # error = subprocess.call([ffpeg_path+'ffmpeg','-i',wave_path,'-ar','8000','-y',out_path])
    error = subprocess.call(ffpeg_path+'ffmpeg'+' -i '+wave_path+' -ar 8000 -y '+out_path)
    print('ERR:{}'.format(error))
    if error:
        return 0
    print ('wav success')
    return out_path
# 将目录下所有wav文件转为amr,并转为对应的数组文件
if __name__ == '__main__':
    print("Generating audio array...")
    # wav_list = []
    for filename in os.listdir("./"):
        # print(os.getcwd())
        if filename.endswith(".wav"):
            print('src_name:',filename)
            framerate = get_wave_info(filename)
            if framerate != 8000:
                print('to 8000Hz')
                filename = wave2Hz8000(filename)
            amr_file = wave2amr(filename)
            if amr_file!=0:
                file2array(amr_file)
            # dst_name = "0_"+filename
            # print('dst_name:',filename)
            # os.rename(filename, dst_name)
            # wav_list.append(filename)
    # gen_wave_table(wav_file_list=wav_list, target_file_name="audio_example_file.h")

以上代码实现的功能:

  • 将当前目录下的所有wav文件,转为8kHz的wav
  • 将对应的8kHz wav,转为amr
  • 将对应的amr,转为hex数组,并保存在.h文件中

注意:音频的转换用的ffmpeg,使用前需确认对应的路径

?
1
ffpeg_path = 'D:/Program Files (x86)/QveAudio/'

转换前文件:

Python实现将wav转amr,并转换成hex数组

执行generate_audio_file.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
E:\Users\eric\Desktop\tools2>generate_audio_file.py
Generating audio array...
src_name: sample_00.wav
nchannels:1
sampwidth:2
framerate:16000Hz
nframes:11541
comptype:NONE
compname:not compressed
to 8000Hz
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_00.wav':
  Duration: 00:00:00.72, bitrate: 256 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'sample_00_8k.wav':
  Metadata:
    ISFT            : Lavf58.3.100
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 pcm_s16le
size=      11kB time=00:00:00.72 bitrate= 128.9kbits/s speed= 103x
video:0kB audio:11kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.675793%
ERR:0
wav success
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_00_8k.wav':
  Metadata:
    encoder         : Lavf58.3.100
  Duration: 00:00:00.72, bitrate: 128 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> amr_nb (libopencore_amrnb))
Press [q] to stop, [?] for help
[libopencore_amrnb @ 043f2d80] bitrate not supported: use one of 4.75k, 5.15k, 5.90k, 6.70k, 7.40k, 7.95k, 10.20k, 12.20k, using 12.20k
Output #0, amr, to 'sample_00_8k.amr':
  Metadata:
    encoder         : Lavf58.3.100
    Stream #0:0: Audio: amr_nb (libopencore_amrnb), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 libopencore_amrnb
size=       1kB time=00:00:00.73 bitrate=  13.0kbits/s speed= 105x   
video:0kB audio:1kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.506757%
ERR:0
amr success
read file done!
src_name: sample_00_8k.wav
nchannels:1
sampwidth:2
framerate:8000Hz
nframes:5771
comptype:NONE
compname:not compressed
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_00_8k.wav':
  Metadata:
    encoder         : Lavf58.3.100
  Duration: 00:00:00.72, bitrate: 128 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> amr_nb (libopencore_amrnb))
Press [q] to stop, [?] for help
[libopencore_amrnb @ 03a02d80] bitrate not supported: use one of 4.75k, 5.15k, 5.90k, 6.70k, 7.40k, 7.95k, 10.20k, 12.20k, using 12.20k
Output #0, amr, to 'sample_00_8k.amr':
  Metadata:
    encoder         : Lavf58.3.100
    Stream #0:0: Audio: amr_nb (libopencore_amrnb), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 libopencore_amrnb
size=       1kB time=00:00:00.73 bitrate=  13.0kbits/s speed=16.4x
video:0kB audio:1kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.506757%
ERR:0
amr success
read file done!
src_name: sample_01.wav
nchannels:1
sampwidth:2
framerate:16000Hz
nframes:16904
comptype:NONE
compname:not compressed
to 8000Hz
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_01.wav':
  Duration: 00:00:01.06, bitrate: 256 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'sample_01_8k.wav':
  Metadata:
    ISFT            : Lavf58.3.100
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 pcm_s16le
size=      17kB time=00:00:01.05 bitrate= 128.6kbits/s speed=44.1x
video:0kB audio:17kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.461429%
ERR:0
wav success
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_01_8k.wav':
  Metadata:
    encoder         : Lavf58.3.100
  Duration: 00:00:01.06, bitrate: 128 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> amr_nb (libopencore_amrnb))
Press [q] to stop, [?] for help
[libopencore_amrnb @ 037c1ec0] bitrate not supported: use one of 4.75k, 5.15k, 5.90k, 6.70k, 7.40k, 7.95k, 10.20k, 12.20k, using 12.20k
Output #0, amr, to 'sample_01_8k.amr':
  Metadata:
    encoder         : Lavf58.3.100
    Stream #0:0: Audio: amr_nb (libopencore_amrnb), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 libopencore_amrnb
size=       2kB time=00:00:01.07 bitrate=  12.9kbits/s speed=  43x   
video:0kB audio:2kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.347222%
ERR:0
amr success
read file done!
src_name: sample_01_8k.wav
nchannels:1
sampwidth:2
framerate:8000Hz
nframes:8452
comptype:NONE
compname:not compressed
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_01_8k.wav':
  Metadata:
    encoder         : Lavf58.3.100
  Duration: 00:00:01.06, bitrate: 128 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> amr_nb (libopencore_amrnb))
Press [q] to stop, [?] for help
[libopencore_amrnb @ 03b81ec0] bitrate not supported: use one of 4.75k, 5.15k, 5.90k, 6.70k, 7.40k, 7.95k, 10.20k, 12.20k, using 12.20k
Output #0, amr, to 'sample_01_8k.amr':
  Metadata:
    encoder         : Lavf58.3.100
    Stream #0:0: Audio: amr_nb (libopencore_amrnb), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 libopencore_amrnb
size=       2kB time=00:00:01.07 bitrate=  12.9kbits/s speed=38.5x   
video:0kB audio:2kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.347222%
ERR:0
amr success
read file done!
src_name: sample_02.wav
nchannels:1
sampwidth:2
framerate:16000Hz
nframes:51067
comptype:NONE
compname:not compressed
to 8000Hz
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_02.wav':
  Duration: 00:00:03.19, bitrate: 256 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'sample_02_8k.wav':
  Metadata:
    ISFT            : Lavf58.3.100
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 pcm_s16le
size=      50kB time=00:00:03.19 bitrate= 128.2kbits/s speed= 457x
video:0kB audio:50kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.152738%
ERR:0
wav success
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_02_8k.wav':
  Metadata:
    encoder         : Lavf58.3.100
  Duration: 00:00:03.19, bitrate: 128 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> amr_nb (libopencore_amrnb))
Press [q] to stop, [?] for help
[libopencore_amrnb @ 03f50900] bitrate not supported: use one of 4.75k, 5.15k, 5.90k, 6.70k, 7.40k, 7.95k, 10.20k, 12.20k, using 12.20k
Output #0, amr, to 'sample_02_8k.amr':
  Metadata:
    encoder         : Lavf58.3.100
    Stream #0:0: Audio: amr_nb (libopencore_amrnb), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 libopencore_amrnb
size=       5kB time=00:00:03.19 bitrate=  12.8kbits/s speed= 160x   
video:0kB audio:5kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.117188%
ERR:0
amr success
read file done!
src_name: sample_02_8k.wav
nchannels:1
sampwidth:2
framerate:8000Hz
nframes:25534
comptype:NONE
compname:not compressed
ffmpeg version N-89672-g41e51fbcd9 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  7.100 / 56.  7.100
  libavcodec     58.  9.100 / 58.  9.100
  libavformat    58.  3.100 / 58.  3.100
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  8.100 /  7.  8.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from 'sample_02_8k.wav':
  Metadata:
    encoder         : Lavf58.3.100
  Duration: 00:00:03.19, bitrate: 128 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> amr_nb (libopencore_amrnb))
Press [q] to stop, [?] for help
[libopencore_amrnb @ 039b0900] bitrate not supported: use one of 4.75k, 5.15k, 5.90k, 6.70k, 7.40k, 7.95k, 10.20k, 12.20k, using 12.20k
Output #0, amr, to 'sample_02_8k.amr':
  Metadata:
    encoder         : Lavf58.3.100
    Stream #0:0: Audio: amr_nb (libopencore_amrnb), 8000 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc58.9.100 libopencore_amrnb
size=       5kB time=00:00:03.19 bitrate=  12.8kbits/s speed= 146x
video:0kB audio:5kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.117188%
ERR:0
amr success
read file done!
E:\Users\eric\Desktop\tools2>

已经生成对应的.h文件

Python实现将wav转amr,并转换成hex数组

生成的格式如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//total len:1190 bytes
const unsigned char sample_00_8k[]={
    0x23, 0x21, 0x41, 0x4d, 0x52, 0x0a, 0x3c, 0xb9, 0xd9, 0x71, 0x28, 0xb8, 0x63, 0xc1, 0xac, 0xec,
    0xc9, 0xe1, 0xc6, 0x66, 0x47, 0x23, 0x00, 0x00, 0x4b, 0xf1, 0x20, 0xf1, 0x15, 0x5c, 0x00, 0x03,
    0x6d, 0x50, 0x30, 0xb8, 0x36, 0x10, 0x3c, 0xbc, 0xed, 0x93, 0x5e, 0xb6, 0xc6, 0x8a, 0xfe, 0x87,
    0x94, 0xfb, 0xd6, 0x6e, 0x86, 0x0c, 0x46, 0xe7, 0x4d, 0x98, 0x54, 0xf2, 0x1c, 0xd7, 0xe5, 0xbf,
    0x93, 0x46, 0x87, 0x0e, 0x7f, 0x90, 0x3c, 0xbf, 0xd9, 0x67, 0x2a, 0xcb, 0x4d, 0x15, 0xbe, 0x1e,
    0xdf, 0xc5, 0x96, 0xa9, 0xd5, 0x3b, 0x86, 0x44, 0xd5, 0x9d, 0xdd, 0xf5, 0x16, 0x3d, 0x1e, 0x29,
    0x33, 0x97, 0xc5, 0x81, 0x0f, 0xe0, 0x3c, 0xb0, 0xf0, 0x1d, 0xe8, 0x4c, 0x78, 0x05, 0xde, 0x0d,
    0x54, 0x41, 0x7d, 0xb1, 0x39, 0x04, 0x56, 0x22, 0xdf, 0x99, 0x98, 0x02, 0xe3, 0x7a, 0x0f, 0xf7,
    0x96, 0x76, 0xf6, 0x0a, 0x81, 0x40, 0x3c, 0x78, 0xf0, 0x29, 0x0f, 0xf0, 0x62, 0x1c, 0x3f, 0x0d,
    0x2a, 0xb2, 0x33, 0x52, 0x36, 0xc4, 0xf5, 0x06, 0x8e, 0x77, 0x18, 0xe2, 0x27, 0xe7, 0xfa, 0x49,
    0x56, 0xac, 0x49, 0x7d, 0x8b, 0x60, 0x3c, 0xb0, 0xea, 0x13, 0x15, 0x74, 0xcc, 0x02, 0x5e, 0x01,
    0x92, 0x4a, 0xe2, 0xfa, 0x60, 0x55, 0x11, 0x58, 0xe0, 0x02, 0x2f, 0x46, 0x4b, 0xac, 0xe8, 0x71,
    0x40, 0xa1, 0xc5, 0xfb, 0x18, 0x60, 0x3c, 0xb4, 0xf5, 0x25, 0x40, 0x62, 0x74, 0x0a, 0x5e, 0x00,
    0xc9, 0xcc, 0xff, 0x98, 0x62, 0x21, 0xda, 0x3a, 0x3a, 0x5d, 0xc8, 0x2b, 0xed, 0x5f, 0xd2, 0xd0,
    0xc9, 0x36, 0x1e, 0x75, 0x10, 0x80, 0x3c, 0x9a, 0xf0, 0x27, 0x14, 0x74, 0x83, 0x0c, 0x5e, 0x15,
    0xd3, 0x36, 0x99, 0xde, 0x4f, 0x39, 0x1c, 0x0d, 0xae, 0xde, 0x6e, 0x89, 0x8f, 0x5f, 0xa2, 0x34,
    0x9c, 0xdc, 0x95, 0x90, 0xbf, 0x40, 0x3c, 0xa6, 0xfc, 0x78, 0x1a, 0xb9, 0x4c, 0x45, 0xbe, 0x16,
    0xf6, 0x2d, 0x95, 0x9c, 0xfc, 0xe9, 0xa7, 0x04, 0x86, 0x6f, 0x06, 0x3d, 0xc8, 0x3c, 0x2f, 0x77,
    0x90, 0x2e, 0x31, 0x6c, 0x7b, 0xf0, 0x3c, 0x7b, 0x42, 0x27, 0x15, 0x22, 0xbd, 0x55, 0x9e, 0x16,
    0xd5, 0x80, 0xbd, 0x7b, 0xe0, 0x4c, 0x61, 0xde, 0xed, 0x64, 0x01, 0x82, 0xde, 0x3e, 0x81, 0x68,
    0x1c, 0x0f, 0x7f, 0xdf, 0xcf, 0x00, 0x3c, 0xbd, 0x32, 0x21, 0x10, 0x58, 0x6d, 0x44, 0x5f, 0x07,
    0x3c, 0x61, 0x66, 0x20, 0x4a, 0xa6, 0x25, 0x14, 0xa8, 0x44, 0x1f, 0x7f, 0x00, 0x27, 0xa3, 0xfb,
    0x19, 0x49, 0xa4, 0x01, 0x21, 0xe0, 0x3c, 0x7b, 0x33, 0x7f, 0x1d, 0x82, 0x8e, 0x5e, 0x5f, 0x24,
    0xf7, 0x20, 0x3a, 0xa1, 0x5d, 0x83, 0xc1, 0x92, 0x47, 0xbc, 0x93, 0x37, 0xae, 0x42, 0xd3, 0x00,
    0xe1, 0xfb, 0xcb, 0xe2, 0x07, 0x80, 0x3c, 0xbd, 0x2e, 0x64, 0x13, 0xbd, 0xba, 0x01, 0x7e, 0x08,
    0xb2, 0xb4, 0xce, 0x77, 0x8d, 0xa6, 0x04, 0x0b, 0x94, 0x06, 0x32, 0x0b, 0x42, 0xa9, 0x8a, 0x02,
    0xa8, 0x3a, 0xb5, 0xa9, 0xf4, 0x10, 0x3c, 0xb3, 0x22, 0x74, 0x1f, 0x75, 0xa1, 0x19, 0xdf, 0x15,
    0x8c, 0x71, 0x31, 0x82, 0xdd, 0xe0, 0x3f, 0x02, 0xbb, 0x8a, 0x3c, 0xab, 0x82, 0x5d, 0xb4, 0xbf,
    0x46, 0x3c, 0x8e, 0x67, 0x6b, 0x20, 0x3c, 0xab, 0xcf, 0x5f, 0x16, 0xea, 0x7b, 0x12, 0xbe, 0x39,
    0x2c, 0xa4, 0x23, 0xab, 0xab, 0x2d, 0x4c, 0xc5, 0x47, 0xd8, 0x92, 0x57, 0x13, 0xc9, 0x9d, 0xda,
    0xc9, 0x56, 0x0c, 0x0d, 0x76, 0xa0, 0x3c, 0x6d, 0x26, 0x6a, 0x26, 0x4a, 0x80, 0x1b, 0x7e, 0x21,
    0xe9, 0x72, 0x16, 0x01, 0xfe, 0xf5, 0x9c, 0x3a, 0x2c, 0x0e, 0x55, 0xc2, 0x20, 0x4c, 0x69, 0xa0,
    0xb0, 0x72, 0x1f, 0x08, 0xa1, 0x80, 0x3c, 0xb1, 0xce, 0x79, 0x1f, 0x76, 0x99, 0x17, 0x5e, 0x1d,
    0x81, 0x11, 0xd1, 0xed, 0xb3, 0x18, 0x1a, 0x6f, 0x4b, 0xbe, 0x39, 0xa6, 0x2f, 0xbd, 0xd3, 0xc3,
    0x05, 0x00, 0xff, 0x5f, 0x66, 0x80, 0x3c, 0xb5, 0x33, 0x64, 0x75, 0xfd, 0x30, 0x03, 0x5e, 0x13,
    0x38, 0xfc, 0xd8, 0xd8, 0xb5, 0xdb, 0xe0, 0x91, 0x56, 0xdd, 0xa0, 0xa8, 0x83, 0x78, 0x39, 0x21,
    0x4e, 0x75, 0xa1, 0x16, 0x38, 0x90, 0x3c, 0x95, 0x33, 0x66, 0x19, 0x72, 0xf0, 0x0a, 0x7e, 0x09,
    0x6a, 0x97, 0x92, 0x9d, 0xd2, 0xf5, 0x62, 0x5e, 0x84, 0x31, 0xa3, 0x2a, 0x41, 0x1a, 0x52, 0x3e,
    0xb0, 0x00, 0xc4, 0x63, 0xfc, 0xf0, 0x3c, 0x59, 0x33, 0x63, 0x77, 0xf4, 0xde, 0x09, 0x7e, 0x01,
    0x00, 0xdc, 0xa5, 0xe9, 0xfa, 0x44, 0xc3, 0x1e, 0x1f, 0x19, 0x30, 0xc5, 0x60, 0xbd, 0xe2, 0x9c,
    0x03, 0xdc, 0x22, 0xab, 0x72, 0x80, 0x3c, 0xbf, 0x01, 0x7f, 0x18, 0x0d, 0x08, 0x00, 0x5c, 0xa6,
    0x6e, 0x11, 0xdd, 0x89, 0xcb, 0x6d, 0x5b, 0x7b, 0x3a, 0xea, 0x28, 0x39, 0x80, 0x0e, 0x01, 0xdf,
    0xbe, 0x91, 0xa7, 0x25, 0x58, 0x20, 0x3c, 0x89, 0x2d, 0x63, 0x17, 0xe9, 0xba, 0xb4, 0x1f, 0x16,
    0x82, 0x8d, 0x25, 0xf8, 0x2c, 0x75, 0xa3, 0xf0, 0xbf, 0xec, 0x31, 0xe9, 0x8b, 0xa5, 0xa0, 0xef,
    0x45, 0x55, 0x54, 0xa1, 0x51, 0xb0, 0x3c, 0xb9, 0x2c, 0xd6, 0x5e, 0xeb, 0x04, 0x04, 0x1e, 0x09,
    0x94, 0xcd, 0x57, 0x07, 0x82, 0x6b, 0xbf, 0xc5, 0x93, 0x51, 0xcc, 0x7f, 0x15, 0x96, 0x0e, 0x50,
    0x81, 0xde, 0x79, 0xfd, 0xe0, 0x10, 0x3c, 0x71, 0x32, 0x1d, 0x5a, 0xba, 0x40, 0x40, 0x36, 0x9e,
    0x94, 0xf2, 0x0c, 0xcf, 0x0f, 0x46, 0xbd, 0xdf, 0x6c, 0x26, 0xa9, 0xaf, 0x87, 0xc6, 0x5b, 0xa8,
    0x10, 0x13, 0x25, 0x6a, 0x7a, 0x20, 0x3c, 0xb9, 0x32, 0xdc, 0x65, 0x79, 0xd8, 0x19, 0x2f, 0x1c,
    0x7e, 0x5c, 0x60, 0x91, 0xad, 0xb2, 0xe2, 0x06, 0x3c, 0xfd, 0x17, 0xd1, 0xa6, 0xa9, 0x82, 0x77,
    0xa4, 0x87, 0xf2, 0xb6, 0x83, 0xd0, 0x3c, 0x95, 0x32, 0x17, 0x67, 0xf9, 0x29, 0x9f, 0x1e, 0x12,
    0xd1, 0xbb, 0x74, 0x77, 0x07, 0x4b, 0x57, 0x1a, 0xd8, 0x9b, 0xdd, 0x77, 0xa4, 0x45, 0x85, 0x13,
    0x34, 0x5e, 0x07, 0x21, 0x99, 0x40, 0x3c, 0x8e, 0xea, 0x14, 0x66, 0xac, 0x28, 0x25, 0x96, 0xc8,
    0x8b, 0x0c, 0x05, 0xc2, 0xd3, 0xc6, 0xd8, 0x8f, 0x22, 0x65, 0xc0, 0xa3, 0xca, 0xd5, 0xda, 0xac,
    0xd5, 0xab, 0x17, 0x60, 0x08, 0x50, 0x3c, 0x9a, 0x71, 0x91, 0x5e, 0x07, 0x70, 0x11, 0x0b, 0x5d,
    0x8d, 0x72, 0x50, 0xff, 0xd7, 0x5a, 0x64, 0xc9, 0x99, 0x08, 0xb4, 0x6a, 0xbd, 0x31, 0x5e, 0x7e,
    0x93, 0x51, 0x42, 0xbf, 0x4c, 0x40, 0x3c, 0xdf, 0x2c, 0x1d, 0x2a, 0xb8, 0xbe, 0x84, 0xdc, 0x23,
    0x39, 0x1a, 0x12, 0x54, 0x46, 0x37, 0x33, 0xc2, 0xa4, 0x33, 0xac, 0x80, 0x70, 0x4e, 0x0b, 0xdb,
    0xb0, 0xff, 0x3f, 0x71, 0x32, 0x70, 0x3c, 0xb4, 0x70, 0x1d, 0x5e, 0xab, 0x0e, 0x02, 0xd4, 0xaa,
    0xd5, 0x4c, 0x8d, 0x2c, 0xf7, 0x11, 0x45, 0x28, 0x91, 0xe9, 0x58, 0xd8, 0x42, 0xda, 0xe8, 0x36,
    0x44, 0x0a, 0x41, 0xf6, 0xea, 0xb0, 0x3c, 0x59, 0x2c, 0x68, 0x94, 0x70, 0x89, 0x45, 0x34, 0xaa,
    0x87, 0x0c, 0xe8, 0x5d, 0xd1, 0xc3, 0x25, 0xb8, 0x85, 0x67, 0x90, 0xdd, 0x84, 0x70, 0xd0, 0x48,
    0xd5, 0xd0, 0x7a, 0xad, 0x7a, 0xb0, 0x3c, 0xb6, 0xec, 0x1f, 0x0f, 0x75, 0xe4, 0x2a, 0x3a, 0x47,
    0x23, 0x13, 0xf7, 0x02, 0x84, 0x03, 0x17, 0x42, 0xe7, 0x72, 0x21, 0x5e, 0xc8, 0x03, 0x5c, 0x80,
    0x49, 0x89, 0x28, 0x80, 0x70, 0x30, 0x3c, 0x55, 0x32, 0x69, 0x43, 0xa9, 0xcc, 0x01, 0x14, 0xab,
    0x83, 0x2c, 0xf3, 0x5d, 0xcf, 0xe3, 0x14, 0x39, 0xb3, 0x69, 0x1f, 0xee, 0xe8, 0xf1, 0xd2, 0x9c,
    0x96, 0x2d, 0x80, 0x3c, 0xa6, 0x20, 0x3c, 0x42, 0xf3, 0x97, 0x22, 0xaa, 0x72, 0x11, 0x10, 0xee,
    0xd8, 0xb6, 0x3b, 0x0c, 0x72, 0xed, 0xf7, 0xc2, 0xbc, 0xbc, 0x3a, 0xbc, 0xe5, 0x64, 0x9b, 0xc6,
    0x51, 0xe8, 0xba, 0x7b, 0xcc, 0xc0, 0x3c, 0x91, 0x32, 0x23, 0x08, 0x58, 0x06, 0x1c, 0xfc, 0x21,
    0xad, 0xba, 0xa7, 0x00, 0x1f, 0xcf, 0xf2, 0x88, 0x21, 0xe7, 0xe9, 0x62, 0xe6, 0x5c, 0xcd, 0x78,
    0xa7, 0x39, 0x83, 0x5d, 0xf8, 0xa0, 0x3c, 0x95, 0x28, 0x69, 0x5d, 0x37, 0xae, 0x16, 0x9e, 0x00,
    0x3a, 0x82, 0x0a, 0x22, 0xcf, 0x19, 0xb1, 0x34, 0x32, 0x57, 0x06, 0xc6, 0x86, 0xb0, 0x83, 0x9f,
    0x98, 0xb3, 0x55, 0xa0, 0xc6, 0x50, 0x3c, 0x55, 0x27, 0x7f, 0x10, 0x06, 0xd8, 0x00, 0x01, 0x10,
    0xaf, 0x0b, 0xae, 0x64, 0x24, 0xc4, 0x49, 0x79, 0x69, 0xba, 0x05, 0x94, 0x20, 0x02, 0x46, 0x30,
    0x0c, 0x30, 0x04, 0x3a, 0x49, 0x00,
};

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/pyt1234567890/article/details/107244795

延伸 · 阅读

精彩推荐