New utility class for easy debug dumping to WAV files
There are currently a number of places in the code where we dump audio
data in various stages of processing for debug purposes. Currently
these all write raw, uncompressed PCM files, which isn't supported by
the most common audio players, and requires the user to supply
metadata such as sample rate, sample size and endianness, etc.
This patch adds a simple class that makes it easy to write WAV files
instead. WAV files still contain the same uncompressed PCM data, but
they have a small header that contains all the requisite metadata, and
are supported by virtually all audio players.
Since some of the debug code that will be writing WAV files is written
in plain C, a C API is included as well.
R=andrew@webrtc.org, bjornv@webrtc.org, henrike@webrtc.org, tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/16809004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6932 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-08-20 07:42:46 +00:00
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
|
|
|
|
|
*
|
|
|
|
|
* Use of this source code is governed by a BSD-style license
|
|
|
|
|
* that can be found in the LICENSE file in the root of the source
|
|
|
|
|
* tree. An additional intellectual property rights grant can be found
|
|
|
|
|
* in the file PATENTS. All contributing project authors may
|
|
|
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef WEBRTC_COMMON_AUDIO_WAV_HEADER_H_
|
|
|
|
|
#define WEBRTC_COMMON_AUDIO_WAV_HEADER_H_
|
|
|
|
|
|
2014-10-31 21:51:03 +00:00
|
|
|
#include <stddef.h>
|
New utility class for easy debug dumping to WAV files
There are currently a number of places in the code where we dump audio
data in various stages of processing for debug purposes. Currently
these all write raw, uncompressed PCM files, which isn't supported by
the most common audio players, and requires the user to supply
metadata such as sample rate, sample size and endianness, etc.
This patch adds a simple class that makes it easy to write WAV files
instead. WAV files still contain the same uncompressed PCM data, but
they have a small header that contains all the requisite metadata, and
are supported by virtually all audio players.
Since some of the debug code that will be writing WAV files is written
in plain C, a C API is included as well.
R=andrew@webrtc.org, bjornv@webrtc.org, henrike@webrtc.org, tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/16809004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6932 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-08-20 07:42:46 +00:00
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
namespace webrtc {
|
|
|
|
|
|
2014-10-31 21:51:03 +00:00
|
|
|
static const size_t kWavHeaderSize = 44;
|
New utility class for easy debug dumping to WAV files
There are currently a number of places in the code where we dump audio
data in various stages of processing for debug purposes. Currently
these all write raw, uncompressed PCM files, which isn't supported by
the most common audio players, and requires the user to supply
metadata such as sample rate, sample size and endianness, etc.
This patch adds a simple class that makes it easy to write WAV files
instead. WAV files still contain the same uncompressed PCM data, but
they have a small header that contains all the requisite metadata, and
are supported by virtually all audio players.
Since some of the debug code that will be writing WAV files is written
in plain C, a C API is included as well.
R=andrew@webrtc.org, bjornv@webrtc.org, henrike@webrtc.org, tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/16809004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6932 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-08-20 07:42:46 +00:00
|
|
|
|
|
|
|
|
enum WavFormat {
|
|
|
|
|
kWavFormatPcm = 1, // PCM, each sample of size bytes_per_sample
|
|
|
|
|
kWavFormatALaw = 6, // 8-bit ITU-T G.711 A-law
|
|
|
|
|
kWavFormatMuLaw = 7, // 8-bit ITU-T G.711 mu-law
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Return true if the given parameters will make a well-formed WAV header.
|
|
|
|
|
bool CheckWavParameters(int num_channels,
|
|
|
|
|
int sample_rate,
|
|
|
|
|
WavFormat format,
|
|
|
|
|
int bytes_per_sample,
|
|
|
|
|
uint32_t num_samples);
|
|
|
|
|
|
|
|
|
|
// Write a kWavHeaderSize bytes long WAV header to buf. The payload that
|
|
|
|
|
// follows the header is supposed to have the specified number of interleaved
|
|
|
|
|
// channels and contain the specified total number of samples of the specified
|
2014-10-31 21:51:03 +00:00
|
|
|
// type. Returns false if any of the input parameters are invalid.
|
|
|
|
|
bool WriteWavHeader(uint8_t* buf,
|
New utility class for easy debug dumping to WAV files
There are currently a number of places in the code where we dump audio
data in various stages of processing for debug purposes. Currently
these all write raw, uncompressed PCM files, which isn't supported by
the most common audio players, and requires the user to supply
metadata such as sample rate, sample size and endianness, etc.
This patch adds a simple class that makes it easy to write WAV files
instead. WAV files still contain the same uncompressed PCM data, but
they have a small header that contains all the requisite metadata, and
are supported by virtually all audio players.
Since some of the debug code that will be writing WAV files is written
in plain C, a C API is included as well.
R=andrew@webrtc.org, bjornv@webrtc.org, henrike@webrtc.org, tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/16809004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6932 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-08-20 07:42:46 +00:00
|
|
|
int num_channels,
|
|
|
|
|
int sample_rate,
|
|
|
|
|
WavFormat format,
|
|
|
|
|
int bytes_per_sample,
|
|
|
|
|
uint32_t num_samples);
|
|
|
|
|
|
2014-10-31 21:51:03 +00:00
|
|
|
// Read a kWavHeaderSize bytes long WAV header from buf and parse the values
|
|
|
|
|
// into the provided output parameters. Returns false if the header is invalid.
|
|
|
|
|
bool ReadWavHeader(const uint8_t* buf,
|
|
|
|
|
int* num_channels,
|
|
|
|
|
int* sample_rate,
|
|
|
|
|
WavFormat* format,
|
|
|
|
|
int* bytes_per_sample,
|
|
|
|
|
uint32_t* num_samples);
|
|
|
|
|
|
New utility class for easy debug dumping to WAV files
There are currently a number of places in the code where we dump audio
data in various stages of processing for debug purposes. Currently
these all write raw, uncompressed PCM files, which isn't supported by
the most common audio players, and requires the user to supply
metadata such as sample rate, sample size and endianness, etc.
This patch adds a simple class that makes it easy to write WAV files
instead. WAV files still contain the same uncompressed PCM data, but
they have a small header that contains all the requisite metadata, and
are supported by virtually all audio players.
Since some of the debug code that will be writing WAV files is written
in plain C, a C API is included as well.
R=andrew@webrtc.org, bjornv@webrtc.org, henrike@webrtc.org, tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/16809004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6932 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-08-20 07:42:46 +00:00
|
|
|
} // namespace webrtc
|
|
|
|
|
|
|
|
|
|
#endif // WEBRTC_COMMON_AUDIO_WAV_HEADER_H_
|