blob: 3d3cc9f0727af9fdce72efa9e7f762f3ee4cda60 [file] [log] [blame]
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef AUDIOTEST_COMMON_H_
#define AUDIOTEST_COMMON_H_
#include <assert.h>
#include <set>
#include <string>
namespace autotest_client {
namespace audio {
class SampleFormat {
public:
enum Type {
kPcmU8,
kPcmS16,
kPcmS24,
kPcmS32,
kPcmInvalid,
};
SampleFormat()
: type_(kPcmInvalid) {}
explicit SampleFormat(Type type)
: type_(type) {}
void set_type(Type type) { type_ = type; }
Type type() const { return type_; }
const char* to_string() const {
switch (type_) {
case kPcmU8:
return "u8";
case kPcmS16:
return "s16";
case kPcmS24:
return "s24";
case kPcmS32:
return "s32";
default:
assert(false);
}
}
size_t bytes() const {
switch (type_) {
case kPcmU8:
return 1;
case kPcmS16:
return 2;
case kPcmS24:
return 3;
case kPcmS32:
return 4;
default:
assert(false);
}
}
inline bool operator==(const SampleFormat &format) const {
return type_ == format.type();
}
private:
Type type_;
};
struct TestConfig {
enum TestType {
kInvalid,
kASharpMinorScale,
kSingleTone,
};
TestConfig()
: type(kInvalid),
alsa_device("default"),
format(SampleFormat::kPcmS16),
tone_length_sec(0.3f),
frequency(440.0f), // Middle-A
sample_rate(44100),
start_volume(1.0f),
end_volume(1.0f),
channels(2) {
}
TestType type;
std::string alsa_device;
SampleFormat format;
double tone_length_sec;
double frequency;
int sample_rate;
double start_volume; // TODO(ajwong): Figure out units, and use this value.
double end_volume;
int channels;
std::set<int> active_channels;
};
// All samples are linear, and little-endian.
struct AudioFunTestConfig {
AudioFunTestConfig()
: capture_alsa_device("default"),
playback_alsa_device("default"),
format(SampleFormat::kPcmS16),
tone_length_sec(10.0f),
sample_rate(64000),
start_volume(1.0f),
end_volume(1.0f),
channels(2),
fftsize(1024u),
verbose(false) {}
std::string capture_alsa_device;
std::string playback_alsa_device;
SampleFormat format;
double tone_length_sec;
int sample_rate;
double start_volume; // TODO(ajwong): Figure out units, and use this value.
double end_volume;
int channels;
std::set<int> active_channels;
unsigned int fftsize;
bool verbose;
};
} // namespace audio
} // namespace autotest_client
#endif // AUDIOTEST_COMMON_H_