【VC开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了VC开源代码-audio_dialog.cpp的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is MPEG4IP.
*
* The Initial Developer of the Original Code is Cisco Systems Inc.
* Portions created by Cisco Systems Inc. are
* Copyright (C) Cisco Systems Inc. 2001. All Rights Reserved.
*
* Contributor(s):
* Dave Mackie dmackie@cisco.com
* Bill May wmay@cisco.com
*/
#define __STDC_LIMIT_MACROS
#include "mp4live.h"
#include "mp4live_gui.h"
#include "audio_oss_source.h"
#include "audio_lame.h"
static GtkWidget *dialog;
static char* source_type;
static char* source_name;
static GtkWidget *source_combo;
static GtkWidget *source_entry;
static GtkWidget *source_list;
static bool source_modified;
static GtkWidget *browse_button;
static GtkWidget *input_label;
static GtkWidget *input_menu;
static GtkWidget *track_label;
static GtkWidget *track_menu;
static GtkWidget *channel_menu;
static GtkWidget *encoding_menu;
static GtkWidget *sampling_rate_menu;
static GtkWidget *bit_rate_menu;
static CAudioCapabilities* pAudioCaps;
static char* inputValues[] = {
"cd", "line", "mic", "mix"
};
static char* inputNames[] = {
"CD", "Line In", "Microphone", "Via Mixer"
};
static u_int8_t inputIndex;
static u_int32_t trackIndex;
static u_int32_t trackNumber; // how many tracks total
static u_int32_t* trackValues = NULL;
static u_int8_t channelValues[] = {
1, 2
};
static char* channelNames[] = {
"1 - Mono", "2 - Stereo"
};
static u_int8_t channelIndex;
static char* encodingNames[] = {
"MP3", "AAC"
};
static u_int8_t encodingIndex;
static char** samplingRateNames = NULL;
static u_int32_t* samplingRateValues = NULL;
static u_int8_t samplingRateIndex;
static u_int8_t samplingRateNumber = 0; // how many sampling rates
// union of valid sampling rates for MP3 and AAC
static const u_int32_t samplingRateAllValues[] = {
7350, 8000, 11025, 12000, 16000, 22050,
24000, 32000, 44100, 48000, 64000, 88200, 96000
};
// union of valid bit rates for MP3 and AAC
static const u_int16_t bitRateAllValues[] = {
8, 16, 24, 32, 40, 48,
56, 64, 80, 96, 112, 128,
144, 160, 192, 224, 256, 320
};
static const u_int8_t bitRateAllNumber =
sizeof(bitRateAllValues) / sizeof(u_int16_t);
static u_int16_t bitRateValues[bitRateAllNumber];
static char* bitRateNames[bitRateAllNumber];
static u_int8_t bitRateIndex;
static u_int8_t bitRateNumber = 0; // how many bit rates
// forward function declarations
static void CreateSamplingRateMenu(CAudioCapabilities* pNewAudioCaps);
static void CreateBitRateMenu();
static void SetSamplingRate(u_int32_t samplingRate);
static void on_destroy_dialog (GtkWidget *widget, gpointer *data)
{
gtk_grab_remove(dialog);
gtk_widget_destroy(dialog);
dialog = NULL;
}
static bool SourceIsDevice()
{
const char* source_name =
gtk_entry_get_text(GTK_ENTRY(source_entry));
return !strncmp(source_name, "/dev/", 5);
}
static void ShowSourceSpecificSettings()
{
if (SourceIsDevice()) {
gtk_widget_show(input_label);
gtk_widget_show(input_menu);
gtk_widget_hide(track_label);
gtk_widget_hide(track_menu);
} else {
gtk_widget_hide(input_label);
gtk_widget_hide(input_menu);
gtk_widget_show(track_label);
gtk_widget_show(track_menu);
}
}
static void SourceOssDevice()
{
char *newSourceName =
gtk_entry_get_text(GTK_ENTRY(source_entry));
// don't probe the already open device!
if (!strcmp(newSourceName,
MyConfig->GetStringValue(CONFIG_AUDIO_SOURCE_NAME))) {
return;
}
// probe new device
CAudioCapabilities* pNewAudioCaps =
new CAudioCapabilities(newSourceName);
// check for errors
if (!pNewAudioCaps->IsValid()) {
ShowMessage("Change Audio Source",
"Specified audio source can't be opened, check name");
delete pNewAudioCaps;
return;
}
if (pAudioCaps != MyConfig->m_audioCapabilities) {
delete pAudioCaps;
}
pAudioCaps = pNewAudioCaps;
// change sampling rate menu
CreateSamplingRateMenu(pNewAudioCaps);
// change bit rate menu
CreateBitRateMenu();
}
static void ChangeSource()
{
char* new_source_name =
gtk_entry_get_text(GTK_ENTRY(source_entry));
if (!strcmp(new_source_name, source_name)) {
source_modified = false;
return;
}
free(source_name);
source_name = stralloc(new_source_name);
if (SourceIsDevice()) {
source_type = AUDIO_SOURCE_OSS;
SourceOssDevice();
} else {
if (pAudioCaps != MyConfig->m_audioCapabilities) {
delete pAudioCaps;
}
pAudioCaps = NULL;
if (IsUrl(source_name)) {
source_type = URL_SOURCE;
} else {
if (access(source_name, R_OK) != 0) {
ShowMessage("Change Audio Source",
"Specified audio source can't be opened, check name");
}
source_type = FILE_SOURCE;
}
}
track_menu = CreateTrackMenu(
track_menu,
'A',
gtk_entry_get_text(GTK_ENTRY(source_entry)),
&trackIndex,
&trackNumber,
&trackValues);
ShowSourceSpecificSettings();
source_modified = false;
}
static void on_source_browse_button (GtkWidget *widget, gpointer *data)
{
FileBrowser(source_entry, GTK_SIGNAL_FUNC(ChangeSource));
}
static void on_source_entry_changed(GtkWidget *widget, gpointer *data)
{
if (widget == source_entry) {
source_modified = true;
}
}
static void on_source_leave(GtkWidget *widget, gpointer *data)
{
if (source_modified) {
ChangeSource();
}
}
static void on_source_list_changed(GtkWidget *widget, gpointer *data)
{
if (widget == source_list) {
ChangeSource();
}
}
static void on_input_menu_activate (GtkWidget *widget, gpointer data)
{
inputIndex = (unsigned int)data & 0xFF;
}
static void on_channel_menu_activate (GtkWidget *widget, gpointer data)
{
channelIndex = (unsigned int)data & 0xFF;
}
static void on_encoding_menu_activate (GtkWidget *widget, gpointer data)
{
encodingIndex = (unsigned int)data & 0xFF;
CreateSamplingRateMenu(pAudioCaps);
CreateBitRateMenu();
}
static void on_sampling_rate_menu_activate (GtkWidget *widget, gpointer data)
{
samplingRateIndex = (unsigned int)data & 0xFF;
CreateBitRateMenu();
}
static void on_bit_rate_menu_activate (GtkWidget *widget, gpointer data)
{
bitRateIndex = (unsigned int)data & 0xFF;
}
void CreateSamplingRateMenu(CAudioCapabilities* pNe
上一篇:
AudioSource.cpp
下一篇:
美国emba教育概况及其借鉴意义