1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// This sub-API supports the following functionalities: 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - File playback. 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - File recording. 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - File conversion. 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Usage example, omitting error checking: 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// using namespace webrtc; 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VoiceEngine* voe = VoiceEngine::Create(); 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VoEBase* base = VoEBase::GetInterface(voe); 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VoEFile* file = VoEFile::GetInterface(voe); 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// base->Init(); 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// int ch = base->CreateChannel(); 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ... 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// base->StartPlayout(ch); 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// file->StartPlayingFileAsMicrophone(ch, "data_file_16kHz.pcm", true); 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ... 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// file->StopPlayingFileAsMicrophone(ch); 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// base->StopPlayout(ch); 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ... 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// base->DeleteChannel(ch); 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// base->Terminate(); 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// base->Release(); 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// file->Release(); 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VoiceEngine::Delete(voe); 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VOICE_ENGINE_VOE_FILE_H 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VOICE_ENGINE_VOE_FILE_H 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 41471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/common_types.h" 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VoiceEngine; 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass WEBRTC_DLLEXPORT VoEFile 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Factory for the VoEFile sub-API. Increases an internal 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reference counter if successful. Returns NULL if the API is not 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // supported or if construction fails. 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static VoEFile* GetInterface(VoiceEngine* voiceEngine); 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Releases the VoEFile sub-API and decreases an internal 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // reference counter. Returns the new reference count. This value should 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // be zero for all sub-API:s before the VoiceEngine object can be safely 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // deleted. 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int Release() = 0; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Starts playing and mixing files with the local speaker signal for 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // playout. 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StartPlayingFileLocally( 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int channel, 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char fileNameUTF8[1024], 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool loop = false, 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FileFormats format = kFileFormatPcm16kHzFile, 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float volumeScaling = 1.0, 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int startPointMs = 0, 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int stopPointMs = 0) = 0; 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Starts playing and mixing streams with the local speaker signal for 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // playout. 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StartPlayingFileLocally( 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int channel, 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org InStream* stream, 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FileFormats format = kFileFormatPcm16kHzFile, 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float volumeScaling = 1.0, 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int startPointMs = 0, int stopPointMs = 0) = 0; 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Stops playback of a file on a specific |channel|. 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StopPlayingFileLocally(int channel) = 0; 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns the current file playing state for a specific |channel|. 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int IsPlayingFileLocally(int channel) = 0; 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Starts reading data from a file and transmits the data either 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // mixed with or instead of the microphone signal. 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StartPlayingFileAsMicrophone( 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int channel, 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char fileNameUTF8[1024], 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool loop = false , 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool mixWithMicrophone = false, 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FileFormats format = kFileFormatPcm16kHzFile, 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float volumeScaling = 1.0) = 0; 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Starts reading data from a stream and transmits the data either 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // mixed with or instead of the microphone signal. 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StartPlayingFileAsMicrophone( 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int channel, 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org InStream* stream, 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool mixWithMicrophone = false, 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FileFormats format = kFileFormatPcm16kHzFile, 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float volumeScaling = 1.0) = 0; 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Stops playing of a file as microphone signal for a specific |channel|. 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StopPlayingFileAsMicrophone(int channel) = 0; 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns whether the |channel| is currently playing a file as microphone. 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int IsPlayingFileAsMicrophone(int channel) = 0; 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Starts recording the mixed playout audio. 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StartRecordingPlayout(int channel, 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* fileNameUTF8, 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecInst* compression = NULL, 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int maxSizeBytes = -1) = 0; 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Stops recording the mixed playout audio. 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StopRecordingPlayout(int channel) = 0; 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StartRecordingPlayout(int channel, 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OutStream* stream, 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecInst* compression = NULL) = 0; 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Starts recording the microphone signal to a file. 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StartRecordingMicrophone(const char* fileNameUTF8, 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecInst* compression = NULL, 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int maxSizeBytes = -1) = 0; 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Starts recording the microphone signal to a stream. 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StartRecordingMicrophone(OutStream* stream, 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecInst* compression = NULL) = 0; 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Stops recording the microphone signal. 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int StopRecordingMicrophone() = 0; 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1377f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org // Don't use. To be removed. 1387f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org virtual int ScaleLocalFilePlayout(int channel, float scale) { return -1; } 1397f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org virtual int ScaleFileAsMicrophonePlayout( 1407f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org int channel, float scale) { return -1; } 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int GetFileDuration(const char* fileNameUTF8, int& durationMs, 1427f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org FileFormats format = kFileFormatPcm16kHzFile) { return -1; } 1437f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org virtual int GetPlaybackPosition(int channel, int& positionMs) { return -1; } 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ConvertPCMToWAV(const char* fileNameInUTF8, 1457f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org const char* fileNameOutUTF8) { return -1; } 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ConvertPCMToWAV(InStream* streamIn, 1477f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org OutStream* streamOut) { return -1; } 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ConvertWAVToPCM(const char* fileNameInUTF8, 1497f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org const char* fileNameOutUTF8) { return -1; } 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ConvertWAVToPCM(InStream* streamIn, 1517f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org OutStream* streamOut) { return -1; } 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ConvertPCMToCompressed(const char* fileNameInUTF8, 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* fileNameOutUTF8, 1547f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org CodecInst* compression) { return -1; } 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ConvertPCMToCompressed(InStream* streamIn, 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org OutStream* streamOut, 1577f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org CodecInst* compression) { return -1; } 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ConvertCompressedToPCM(const char* fileNameInUTF8, 1597f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org const char* fileNameOutUTF8) { return -1; } 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ConvertCompressedToPCM(InStream* streamIn, 1617f5e2973967c6ef5859334eb4ccac2c7c0020565henrika@webrtc.org OutStream* streamOut) { return -1; } 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected: 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEFile() {} 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~VoEFile() {} 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_VOICE_ENGINE_VOE_FILE_H 170