Enabled to select monaural audio

For sites that bit rate is limited
master
shousa 2014-03-03 23:22:40 +09:00
parent a7617744cc
commit 9af05a3f1d
10 changed files with 148 additions and 33 deletions

4
OBS.rc
View File

@ -132,7 +132,9 @@ BEGIN
RTEXT "Settings.Encoding.Audio.Bitrate",IDC_STATIC,221,101,128,8
COMBOBOX IDC_AUDIOBITRATE,354,99,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Encoding.Audio.Format",IDC_STATIC,10,117,138,8
COMBOBOX IDC_AUDIOFORMAT,152,115,264,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_AUDIOFORMAT,152,115,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Settings.Encoding.Audio.Channel",IDC_STATIC,221,117,128,8
COMBOBOX IDC_AUDIOCHANNEL,354,115,61,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Settings.Info",IDC_INFO,4,288,417,37,NOT WS_VISIBLE
RTEXT "Settings.Encoding.Video.Encoder",IDC_STATIC,10,16,138,8
CONTROL "Settings.Encoding.Video.Encoderx264",IDC_ENCODERX264,

View File

@ -46,7 +46,7 @@ public:
{
curBitRate = bitRate;
faac = faacEncOpen(App->GetSampleRateHz(), 2, &numReadSamples, &outputSize);
faac = faacEncOpen(App->GetSampleRateHz(), App->NumAudioChannels(), &numReadSamples, &outputSize);
//Log(TEXT("numReadSamples: %d"), numReadSamples);
aacBuffer.SetSize(outputSize+2);
@ -54,7 +54,7 @@ public:
aacBuffer[1] = 0x1;
faacEncConfigurationPtr config = faacEncGetCurrentConfiguration(faac);
config->bitRate = (bitRate*1000)/2;
config->bitRate = (bitRate*1000)/App->NumAudioChannels();
config->quantqual = 100;
config->inputFormat = FAAC_INPUT_FLOAT;
config->mpegVersion = MPEG4;

View File

@ -61,8 +61,14 @@ public:
lame_set_in_samplerate(lgf, App->GetSampleRateHz());
lame_set_out_samplerate(lgf, App->GetSampleRateHz());
lame_set_num_channels(lgf, 2);
lame_set_mode(lgf, STEREO);
lame_set_num_channels(lgf, App->NumAudioChannels());
//lame_set_mode(lgf, STEREO);
if (App->NumAudioChannels()==2){
lame_set_mode(lgf, STEREO);
}
if (App->NumAudioChannels()==1){
lame_set_mode(lgf, MONO);
}
lame_set_disable_reservoir(lgf, TRUE); //bit reservoir has to be disabled for seamless streaming
lame_set_VBR(lgf, vbr_off);
lame_set_brate(lgf, bitRate);

View File

@ -291,6 +291,7 @@ void SetupIni()
AppConfig->SetInt (TEXT("Audio Encoding"), TEXT("Format"), 1);
AppConfig->SetString(TEXT("Audio Encoding"), TEXT("Bitrate"), TEXT("128"));
AppConfig->SetInt (TEXT("Audio Encoding"), TEXT("isSTEREO"), 1);
AppConfig->SetInt (TEXT("Publish"), TEXT("Service"), 0);
AppConfig->SetInt (TEXT("Publish"), TEXT("Mode"), 0);

View File

@ -587,6 +587,8 @@ class OBS
List<AudioSource*> auxAudioSources;
UINT sampleRateHz;
UINT audioChannels;
BOOL isSTEREO;
AudioEncoder *audioEncoder;
@ -1032,6 +1034,7 @@ public:
}
inline UINT GetSampleRateHz() const {return sampleRateHz;}
inline UINT NumAudioChannels() const {return audioChannels;}
inline QWORD GetAudioTime() const {return latestAudioTime;}
inline QWORD GetVideoTime() const {return latestVideoTime;}

View File

@ -473,7 +473,20 @@ retryHookTestV2:
}
Log(L"------------------------------------------");
Log(L"Audio Format: %uhz", sampleRateHz);
Log(L"Audio Format: %u Hz", sampleRateHz);
//------------------------------------------------------------------
BOOL isSTEREO = AppConfig->GetInt(L"Audio Encoding", L"isSTEREO", 1);
switch (isSTEREO) {
case 0: audioChannels = 1; break;
default:
case 1: audioChannels = 2; break;
}
Log(L"------------------------------------------");
Log(L"Audio Channels: %u Ch", audioChannels);
//------------------------------------------------------------------

View File

@ -267,8 +267,13 @@ char* OBS::EncMetaData(char *enc, char *pend, bool bFLVFile)
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiodatarate, double(audioBitRate)); //ex. 128kb\s
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiosamplerate, double(App->GetSampleRateHz()));
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiosamplesize, 16.0);
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiochannels, 2.0);
enc = AMF_EncodeNamedBoolean(enc, pend, &av_stereo, true);
enc = AMF_EncodeNamedNumber(enc, pend, &av_audiochannels, double(App->NumAudioChannels()));
//enc = AMF_EncodeNamedBoolean(enc, pend, &av_stereo, true);
if (App->NumAudioChannels() > 2 || App->NumAudioChannels() <1)
CrashError(TEXT("bad audio channnel configuration"));
enc = AMF_EncodeNamedBoolean(enc, pend, &av_stereo, App->NumAudioChannels()==2);
enc = AMF_EncodeNamedString(enc, pend, &av_encoder, &av_OBSVersion);
*enc++ = 0;
*enc++ = 0;

View File

@ -114,6 +114,10 @@ void SettingsEncoding::ApplySettings()
if(curSel != CB_ERR)
AppConfig->SetInt(TEXT("Audio Encoding"), TEXT("Format"), curSel);
int curSelCh = (int)SendMessage(GetDlgItem(hwnd, IDC_AUDIOCHANNEL), CB_GETCURSEL, 0, 0);
if(curSelCh != CB_ERR)
AppConfig->SetInt(TEXT("Audio Encoding"), TEXT("isSTEREO"), curSelCh);
bool bUseCBR = SendMessage(GetDlgItem(hwnd, IDC_USECBR), BM_GETCHECK, 0, 0) == BST_CHECKED;
AppConfig->SetInt(TEXT("Video Encoding"), TEXT("UseCBR"), bUseCBR);
@ -252,31 +256,60 @@ INT_PTR SettingsEncoding::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
//--------------------------------------------
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOBITRATE);
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("112"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("192"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("256"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("320"));
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOFORMAT);
LoadSettingComboString(hwndTemp, TEXT("Audio Encoding"), TEXT("Bitrate"), TEXT("96"));
BOOL isAAC = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCODEC), CB_GETCURSEL, 0, 0) == 1;
if (isAAC)
{
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1kHz"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48kHz"));
} else {
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1kHz"));
}
LoadSettingComboInt(hwndTemp, TEXT("Audio Encoding"), TEXT("Format"), 1, isAAC ? 1 : 0);
//--------------------------------------------
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOFORMAT);
//SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48khz mono"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1khz stereo"));
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOCHANNEL);
BOOL isAAC = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCODEC), CB_GETCURSEL, 0, 0) == 1;
if (isAAC)
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48khz stereo"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("mono"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("stereo"));
LoadSettingComboInt(hwndTemp, TEXT("Audio Encoding"), TEXT("Format"), 1, isAAC ? 1 : 0);
LoadSettingComboInt(hwndTemp, TEXT("Audio Encoding"), TEXT("isSTEREO"), 1, 1);
//--------------------------------------------
hwndTemp = GetDlgItem(hwnd, IDC_AUDIOBITRATE);
BOOL isSTEREO = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCHANNEL), CB_GETCURSEL, 0, 0) == 1;
if (isSTEREO)
{
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));//default
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("112"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("192"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("256"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("320"));
}else{
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("32"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("40"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));//default
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("56"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
}
LoadSettingComboString(hwndTemp, TEXT("Audio Encoding"), TEXT("Bitrate"), isSTEREO ? TEXT("96") : TEXT("48"));
//--------------------------------------------
@ -299,23 +332,73 @@ INT_PTR SettingsEncoding::ProcMessage(UINT message, WPARAM wParam, LPARAM lParam
{
case IDC_QUALITY:
case IDC_AUDIOBITRATE:
if(HIWORD(wParam) == CBN_SELCHANGE)
{
bDataChanged = true;
}
break;
case IDC_AUDIOFORMAT:
if(HIWORD(wParam) == CBN_SELCHANGE)
{
bDataChanged = true;
}
break;
case IDC_AUDIOCHANNEL:
if(HIWORD(wParam) == CBN_SELCHANGE)
{
HWND hwndAudioBitrate = GetDlgItem(hwnd, IDC_AUDIOBITRATE);
SendMessage(hwndAudioBitrate, CB_RESETCONTENT, 0, 0);
BOOL isSTEREO = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCHANNEL), CB_GETCURSEL, 0, 0) == 1;
if (isSTEREO)
{
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));//default
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("112"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("192"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("256"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("320"));
}else{
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("32"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("40"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("48"));//default
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("56"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("64"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("80"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("96"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("128"));
SendMessage(hwndAudioBitrate, CB_ADDSTRING, 0, (LPARAM)TEXT("160"));
}
SendMessage(hwndAudioBitrate, CB_SETCURSEL, isSTEREO ? 3 : 2, 0);
bDataChanged = true;
}
break;
case IDC_AUDIOCODEC:
if(HIWORD(wParam) == CBN_SELCHANGE)
{
HWND hwndTemp = GetDlgItem(hwnd, IDC_AUDIOFORMAT);
SendMessage(hwndTemp, CB_RESETCONTENT, 0, 0);
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1khz stereo"));
HWND hwndAudioFormat = GetDlgItem(hwnd, IDC_AUDIOFORMAT);
SendMessage(hwndAudioFormat, CB_RESETCONTENT, 0, 0);
BOOL isAAC = SendMessage(GetDlgItem(hwnd, IDC_AUDIOCODEC), CB_GETCURSEL, 0, 0) == 1;
if (isAAC)
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)TEXT("48khz stereo"));
SendMessage(hwndTemp, CB_SETCURSEL, isAAC ? 1 : 0, 0);
if (isAAC){
SendMessage(hwndAudioFormat, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1kHz"));
SendMessage(hwndAudioFormat, CB_ADDSTRING, 0, (LPARAM)TEXT("48kHz"));
}else{
SendMessage(hwndAudioFormat, CB_ADDSTRING, 0, (LPARAM)TEXT("44.1kHz"));
}
SendMessage(hwndAudioFormat, CB_SETCURSEL, isAAC ? 1 : 0, 0);
bDataChanged = true;
}

View File

@ -70,6 +70,7 @@
#define IDC_BASETHRESHOLD_EDIT 1020
#define IDC_KEYFRAMEINTERVAL_EDIT 1020
#define IDC_VIDEOCODEC 1020
#define IDC_AUDIOCHANNEL 1021
#define IDC_BASETHRESHOLD 1021
#define IDC_BLEND_EDIT 1022
#define IDC_BLEND 1023

View File

@ -191,6 +191,7 @@ Settings.Encoding.Video="Video Encoding"
Settings.Encoding.Audio.Bitrate="Bitrate:"
Settings.Encoding.Audio.Codec="Codec:"
Settings.Encoding.Audio.Format="Format:"
Settings.Encoding.Audio.Channel="Channel:"
Settings.Encoding.Video.Encoder="Encoder:"
Settings.Encoding.Video.Encoderx264="x264"