/*
 *  Copyright (c) 2017 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 MODULES_AUDIO_PROCESSING_TEST_CONVERSATIONAL_SPEECH_TIMING_H_
#define MODULES_AUDIO_PROCESSING_TEST_CONVERSATIONAL_SPEECH_TIMING_H_

#include <string>
#include <vector>

#include "api/array_view.h"

namespace webrtc {
namespace test {
namespace conversational_speech {

struct Turn{
  Turn(std::string new_speaker_name,
       std::string new_audiotrack_file_name,
       int new_offset,
       int gain)
      : speaker_name(new_speaker_name),
        audiotrack_file_name(new_audiotrack_file_name),
        offset(new_offset),
        gain(gain) {}
  bool operator==(const Turn &b) const;
  std::string speaker_name;
  std::string audiotrack_file_name;
  int offset;
  int gain;
};

// Loads a list of turns from a file.
std::vector<Turn> LoadTiming(const std::string& timing_filepath);

// Writes a list of turns into a file.
void SaveTiming(const std::string& timing_filepath,
                rtc::ArrayView<const Turn> timing);

}  // namespace conversational_speech
}  // namespace test
}  // namespace webrtc

#endif  // MODULES_AUDIO_PROCESSING_TEST_CONVERSATIONAL_SPEECH_TIMING_H_
