WAV
Encodes audio data streams in the PCM format into the WAV format.
The function calling process is as follows:
- Obtain the size of the memory to be applied for encoding (dstBufLen).
- Call the main function HMPPA_Wav_Encode_16s8u for encoding.
The function interface declaration is as follows:
- Obtaining the size of the memory to be applied for encoding:
HmppResult HMPPA_Wav_GetEncodeDstBufLen_16s8u(int32_t len, int32_t *dstLen);
- Encoding:
HmppResult HMPPA_Wav_Encode_16s8u(const int16_t *src, int32_t len, uint8_t *dst, int channels, int sampleRate);
Parameters
Parameter |
Description |
Value Range |
Input/Output |
|---|---|---|---|
src |
Pointer to the AMRWB stream to be encoded |
The value cannot be NULL. |
Input |
len |
Length of the data stream to be encoded (in dual-bytes) |
(0, 1073741789] |
Input |
dst |
Pointer to the destination vector |
The value cannot be NULL. |
Output |
dstBufLen |
Length (in bytes) required to point to the destination vector |
The value cannot be NULL. |
Output |
channels |
Number of audio channels |
1 or 2 |
Input |
sampleRate |
Audio sampling rate |
(0, INT_MAX] |
Input |
Return Value
- Success: HMPP_STS_NO_ERR
- Failure: An error code is returned.
Error Codes
Error Code |
Description |
|---|---|
HMPP_STS_NULL_PTR_ERR |
The value of src, dst, or policy is NULL. |
HMPP_STS_BAD_ARG_ERR |
The input of channels and sampleRate is invalid. |
HMPP_STS_SIZE_ERR |
The length is invalid. |
Example
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <hmpp.h>
int main(int argc, char *argv[])
{
if (argc < 3) {
fprintf(stderr, "%s in.amr out.wav\n", argv[0]);
return 1;
}
FILE *in = fopen(argv[1], "r");
FILE *out = fopen(argv[2], "w+");
if (!in || !out) {
printf("Open file failed!\n");
return 1;
}
fseek(in, 0, SEEK_END);
int32_t srcLen = ftell(in) / 2;
fseek(in, 0, SEEK_SET);
int32_t dstLen;
re = HMPPA_Wav_GetEncodeDstBufLen_16s8u(srcLen, &dstLen);
uint8_t *dst = (uint8_t*)malloc(dstLen * sizeof(uint8_t));
fread(src, sizeof(int16_t), srcLen, in);
re = HMPPA_Wav_Encode_16s8u(src, srcLen, dst, 1, 8000);
printf("HmppResult:%d\n", re);
fwrite(dst, sizeof(int16_t), dstLen, out);
fclose(in);
fclose(out);
return 0;
}
Output:
HmppResult:0