diff --git a/BAKKA Editor/BAKKA Editor.vcxproj b/BAKKA Editor/BAKKA Editor.vcxproj index bc56988..da64c53 100644 --- a/BAKKA Editor/BAKKA Editor.vcxproj +++ b/BAKKA Editor/BAKKA Editor.vcxproj @@ -89,12 +89,12 @@ Level3 _DEBUG;%(PreprocessorDefinitions) - C:\Users\otaku\source\repos\BAKKA Editor\BAKKA Editor\irrKlang-64bit-1.6.0\include;%(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) - irrKlang.lib;%(AdditionalDependencies) - C:\Users\otaku\source\repos\BAKKA Editor\BAKKA Editor\irrKlang-64bit-1.6.0\lib\Winx64-visualStudio;%(AdditionalLibraryDirectories) + %(AdditionalDependencies) + %(AdditionalLibraryDirectories) Windows main @@ -118,12 +118,12 @@ Level3 NDEBUG;%(PreprocessorDefinitions) - C:\Users\otaku\source\repos\BAKKA Editor\BAKKA Editor\irrKlang-64bit-1.6.0\include;%(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) - irrKlang.lib;%(AdditionalDependencies) - C:\Users\otaku\source\repos\BAKKA Editor\BAKKA Editor\irrKlang-64bit-1.6.0\lib\Winx64-visualStudio;%(AdditionalLibraryDirectories) + %(AdditionalDependencies) + %(AdditionalLibraryDirectories) Windows main @@ -133,7 +133,7 @@ - O:\Wacca_Stuff\Charting\irrKlang-64bit-1.6.0\bin\dotnet-4-64\irrKlang.NET4.dll + irrKlang-64bit-1.6.0\lib\dotnet-4-64\irrKlang.NET4.dll diff --git a/BAKKA Editor/MyForm.h b/BAKKA Editor/MyForm.h index 0ddce10..fdb3ef0 100644 --- a/BAKKA Editor/MyForm.h +++ b/BAKKA Editor/MyForm.h @@ -1,5 +1,4 @@ #pragma once -#pragma comment(lib, "irrKlang.lib") // link with irrKlang.dll #include #include #include @@ -8,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -134,6 +132,7 @@ namespace BAKKAEditor { using namespace System::Drawing; using namespace System::IO; using namespace System::Threading; + using namespace System::Reflection; /// /// Summary for MyForm @@ -144,9 +143,6 @@ namespace BAKKAEditor { MyForm(void) { InitializeComponent(); - // - //TODO: Add the constructor code here - // } protected: @@ -165,6 +161,8 @@ namespace BAKKAEditor { ISoundEngine SoundEngine; ISound^ currentlyPlayingSong = SoundEngine.Play2D(stdStringToSystemString(songFilePath), true, true); ISound^ currentlyPlayingTickSound = SoundEngine.Play2D(stdStringToSystemString(tickFilePath), false, true); + BufferedGraphicsContext^ bufferedGfxContext; + BufferedGraphics^ bufferedGfx; protected: private: System::Windows::Forms::ToolStripMenuItem^ fileToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ newToolStripMenuItem; @@ -329,6 +327,7 @@ private: System::Windows::Forms::Label^ songFileName; private: System::Windows::Forms::Button^ selectSongFile; private: System::Windows::Forms::OpenFileDialog^ openFileDialogSong; private: System::Windows::Forms::Label^ VolumeLabel; +private: System::Windows::Forms::Timer^ timer1; private: System::Windows::Forms::TrackBar^ SongVolume; private: System::ComponentModel::BackgroundWorker^ backgroundWorkerSong; @@ -541,6 +540,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; this->backgroundWorker1 = (gcnew System::ComponentModel::BackgroundWorker()); this->backgroundWorker2 = (gcnew System::ComponentModel::BackgroundWorker()); this->panel1 = (gcnew System::Windows::Forms::Panel()); + this->timer1 = (gcnew System::Windows::Forms::Timer(this->components)); this->menuStrip->SuspendLayout(); this->NoteTypeBox->SuspendLayout(); (cli::safe_cast(this->VisualHispeed))->BeginInit(); @@ -1653,6 +1653,12 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; this->panel1->Controls->Add(this->CurrentObjectText); this->panel1->Name = L"panel1"; // + // timer1 + // + this->timer1->Enabled = true; + this->timer1->Interval = 20; + this->timer1->Tick += gcnew System::EventHandler(this, &MyForm::timer1_Tick); + // // MyForm // this->AllowDrop = true; @@ -3617,6 +3623,13 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; //InitialSettingsPane->Width = (this->Width - NoteTypeBox->Width - 36); //Point position(NoteTypeBox->Width + 12, 27); //InitialSettingsPane->Location = position; + + // Update BufferedGraphics size + bufferedGfxContext->MaximumBuffer = Drawing::Size(CirclePanel->Width + 1, CirclePanel->Height + 1); + bufferedGfx = bufferedGfxContext->Allocate(CirclePanel->CreateGraphics(), + Drawing::Rectangle(0, 0, CirclePanel->Width, CirclePanel->Height)); + DrawToGraphics(bufferedGfx->Graphics); + RefreshPaint(); } private: System::Void MeasureNum_ValueChanged(System::Object^ sender, System::EventArgs^ e) { @@ -3760,14 +3773,11 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; } } private: System::Void CirclePanel_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { - //Note graphics - Graphics^ notesGraphics = e->Graphics; - BufferedGraphics^ BufferedNotesGraphics; - //Configure buffer context - BufferedGraphicsContext^ context = BufferedGraphicsManager::Current; - context->MaximumBuffer = System::Drawing::Size(CirclePanel->Width + 1, CirclePanel->Height + 1); + bufferedGfx->Render(e->Graphics); + } + + void DrawToGraphics(Graphics^ g) { System::Drawing::Rectangle PanelRect(0, 0, CirclePanel->Width, CirclePanel->Height); - BufferedNotesGraphics = context->Allocate(CirclePanel->CreateGraphics(), PanelRect); //Pens for drawing parts of circle float widthOfBasePen = (float)CirclePanel->Width * (4.f / 600.f); //sizes are essentially the pixel width if the box is 600x600 float widthOfLinesPen = (float)CirclePanel->Width * (2.f / 600.f); @@ -3802,7 +3812,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; System::Drawing::Size size(sizeOfRect, sizeOfRect); System::Drawing::Rectangle Rect(location, size); //Drawing mode - BufferedNotesGraphics->Graphics->SmoothingMode = Drawing2D::SmoothingMode::HighSpeed; + g->SmoothingMode = Drawing2D::SmoothingMode::HighSpeed; //Current time float currentTime; if (scrollBarChanged) { @@ -3826,7 +3836,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; //Make Background Transparent SolidBrush^ backgroundBrush = gcnew SolidBrush(this->BackColor); - BufferedNotesGraphics->Graphics->FillRectangle(backgroundBrush, PanelRect); + g->FillRectangle(backgroundBrush, PanelRect); //Draw pre-existing mask std::map>>::iterator mapitr = mapOfMasks.lower_bound(currentTime); @@ -3839,7 +3849,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; for (std::list>::iterator listITR = mapitr->second.begin(); listITR != mapitr->second.end(); listITR++) { maskStartAngle = -((float)listITR->first * 6); maskArcLength = -(((float)listITR->second - (float)listITR->first) * 6); - BufferedNotesGraphics->Graphics->FillPie(MaskBrush, Rect, maskStartAngle, maskArcLength); + g->FillPie(MaskBrush, Rect, maskStartAngle, maskArcLength); } } } @@ -3850,7 +3860,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; for (std::list>::iterator listITR = mapitr->second.begin(); listITR != mapitr->second.end(); listITR++) { maskStartAngle = -((float)listITR->first * 6); maskArcLength = -(((float)listITR->second - (float)listITR->first) * 6); - BufferedNotesGraphics->Graphics->FillPie(MaskBrush, Rect, maskStartAngle, maskArcLength); + g->FillPie(MaskBrush, Rect, maskStartAngle, maskArcLength); } } } @@ -3860,7 +3870,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; for (std::list>::iterator listITR = mapitr->second.begin(); listITR != mapitr->second.end(); listITR++) { maskStartAngle = -((float)listITR->first * 6); maskArcLength = -(((float)listITR->second - (float)listITR->first) * 6); - BufferedNotesGraphics->Graphics->FillPie(MaskBrush, Rect, maskStartAngle, maskArcLength); + g->FillPie(MaskBrush, Rect, maskStartAngle, maskArcLength); } } } @@ -3868,15 +3878,15 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; //Draw selected mask if (SelectedLineType == 1 && Rect.Width >= 1) { if (SelectedNoteTypeVisual == 12) { - BufferedNotesGraphics->Graphics->FillPie(MaskBrush, Rect, startAngle, arcLength); + g->FillPie(MaskBrush, Rect, startAngle, arcLength); } if (SelectedNoteTypeVisual == 13) { - BufferedNotesGraphics->Graphics->FillPie(MaskRemoveBrush, Rect, startAngle, arcLength); + g->FillPie(MaskRemoveBrush, Rect, startAngle, arcLength); } } //Switch Drawing mode - BufferedNotesGraphics->Graphics->SmoothingMode = Drawing2D::SmoothingMode::AntiAlias; + g->SmoothingMode = Drawing2D::SmoothingMode::AntiAlias; //Draw measure circle float nearestMeasure = std::ceil(currentTime); @@ -3893,13 +3903,13 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; System::Drawing::Size sizeFut(sizeOfRectFut, sizeOfRectFut); System::Drawing::Rectangle RectFut(locationFut, sizeFut); if (RectFut.Width >= 1) { - BufferedNotesGraphics->Graphics->DrawEllipse(CircleBeatPen, RectFut); + g->DrawEllipse(CircleBeatPen, RectFut); } } //Draw base circle - BufferedNotesGraphics->Graphics->DrawEllipse(CircleBasePen, Rect); + g->DrawEllipse(CircleBasePen, Rect); //Draw Degree Lines for (int i = 0; i < 360; i += 6) { //i is the angle n degrees @@ -3923,7 +3933,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; yEnd = (innerRadius * sin(degToRad)) + yCenterOfCircle; PointF coordPointEnd(xEnd, yEnd); - BufferedNotesGraphics->Graphics->DrawLine(CircleLinesPen, coordPointStart, coordPointEnd); + g->DrawLine(CircleLinesPen, coordPointStart, coordPointEnd); } //Draw future holds @@ -3953,14 +3963,14 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; System::Drawing::Size sizeFut(sizeOfRectFut, sizeOfRectFut); System::Drawing::Rectangle RectFut(locationFut, sizeFut); if (RectFut.Width >= 1) { - BufferedNotesGraphics->Graphics->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw hold + g->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw hold if (listofNotesitr->noteType == 25) { //If bonus hold CircleNotePen->Color = BonusColor; CircleNotePen->Width += highlightWidth; futStartAngle += 2; //increase size for highlight futArcLength -= 4; - BufferedNotesGraphics->Graphics->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw highlight + g->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw highlight } if (HighlightCheckBox->Checked) { if (islistITREqualToViewITR(listofNotesitr)) { @@ -3968,7 +3978,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; CircleNotePen->Width += highlightWidth; futStartAngle += 2; //increase size for highlight futArcLength -= 4; - BufferedNotesGraphics->Graphics->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw highlight + g->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw highlight } } } @@ -4008,14 +4018,14 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; System::Drawing::Size sizeFut(sizeOfRectFut, sizeOfRectFut); System::Drawing::Rectangle RectFut(locationFut, sizeFut); if (RectFut.Width >= 1) { - BufferedNotesGraphics->Graphics->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw note + g->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw note if (listofNotesitr->noteType >= 20) { //If bonus note CircleNotePen->Color = BonusColor; CircleNotePen->Width += highlightWidth; futStartAngle += 2; //increase size for highlight futArcLength -= 4; - BufferedNotesGraphics->Graphics->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw highlight + g->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw highlight } if (HighlightCheckBox->Checked) { if (islistITREqualToViewITR(listofNotesitr)) { @@ -4023,7 +4033,7 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; CircleNotePen->Width += highlightWidth; futStartAngle += 2; //increase size for highlight futArcLength -= 4; - BufferedNotesGraphics->Graphics->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw highlight + g->DrawArc(CircleNotePen, RectFut, futStartAngle, futArcLength); //Draw highlight } } } @@ -4041,11 +4051,8 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; if (SelectedLineType == 1 && Rect.Width >= 1) { CircleNotePen->Color = returnColor(SelectedNoteTypeVisual); CircleNotePen->Width = widthOfNotePen; - BufferedNotesGraphics->Graphics->DrawArc(CircleNotePen, Rect, startAngle, arcLength); + g->DrawArc(CircleNotePen, Rect, startAngle, arcLength); } - - //Draw Buffer to screen - BufferedNotesGraphics->Render(notesGraphics); } bool islistITREqualToViewITR(std::list::iterator listITR) { if (listITR->beat != viewNotesITR->beat) @@ -4270,6 +4277,18 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; SetStyle(ControlStyles::OptimizedDoubleBuffer, true); SetStyle(ControlStyles::UserPaint, true); SetStyle(ControlStyles::AllPaintingInWmPaint, true); + + // Initialize BufferedGraphics + bufferedGfxContext = BufferedGraphicsManager::Current; + bufferedGfxContext->MaximumBuffer = Drawing::Size(CirclePanel->Width + 1, CirclePanel->Height + 1); + bufferedGfx = bufferedGfxContext->Allocate(CirclePanel->CreateGraphics(), + Drawing::Rectangle(0, 0, CirclePanel->Width, CirclePanel->Height)); + DrawToGraphics(bufferedGfx->Graphics); + + // Force double buffering on CirlcePanel + Type^ controlType = CirclePanel->GetType(); + PropertyInfo^ pi = controlType->GetProperty("DoubleBuffered", BindingFlags::Instance | BindingFlags::NonPublic); + pi->SetValue(CirclePanel, true); } private: System::Void CirclePanel_Scroll(System::Object^ sender, System::Windows::Forms::ScrollEventArgs^ e) { if (e->ScrollOrientation == ScrollOrientation::VerticalScroll) { @@ -4329,5 +4348,8 @@ private: System::Windows::Forms::CheckBox^ HighlightCheckBox; private: System::Void HighlightCheckBox_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { RefreshPaint(); } +private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { + DrawToGraphics(bufferedGfx->Graphics); +} }; } diff --git a/BAKKA Editor/MyForm.resx b/BAKKA Editor/MyForm.resx index be471fa..90935bd 100644 --- a/BAKKA Editor/MyForm.resx +++ b/BAKKA Editor/MyForm.resx @@ -120,42 +120,11 @@ 17, 17 - - - 0, 0 - - - 990, 24 - - - - 0 - - - Menu Strip - - - menuStrip - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 14 - - - 37, 20 - - - File - Ctrl+N + 186, 22 @@ -195,12 +164,43 @@ Exit + + 37, 20 + + + File + 52, 20 About + + 0, 0 + + + 990, 24 + + + + 0 + + + Menu Strip + + + menuStrip + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 14 + True @@ -387,9 +387,6 @@ 8 - - 124, 17 - True @@ -408,6 +405,9 @@ Hold (H) + + 124, 17 + After first insert of a hold, you must continue adding to the hold until end. @@ -609,9 +609,6 @@ Tap, Orange Flicks, and Green Flicks 13 - - 124, 17 - 87, 19 @@ -1236,54 +1233,6 @@ Default: 0.5 (1/2 of a measure) True - - RemoveMask - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickBox - - - 5 - - - AddMask - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickBox - - - 6 - - - 12, 119 - - - 496, 84 - - - 15 - - - Gimmick Types - - - GimmickBox - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 11 - True @@ -1341,308 +1290,32 @@ Default: 0.5 (1/2 of a measure) 6 - - True + + 12, 119 - - ReverseEnd2BeatNum2 + + 496, 84 - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 0 - - - label12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 1 - - - ReverseEnd2BeatNum1 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 2 - - - ReverseEnd2MeasureNum - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 3 - - - ReverseEnd1BeatNum2 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 4 - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 5 - - - ReverseEnd1BeatNum1 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 6 - - - ReverseEnd1MeasureNum - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 7 - - - StopEndMeasureNum - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 8 - - - StopEndBeatNum2 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 9 - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 10 - - - StopEndBeatNum1 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 11 - - - HiSpeedChangeNum - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 12 - - - TimeSigNum2 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 13 - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 14 - - - TimeSigNum1 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - + 15 - - BPMChangeNum + + Gimmick Types - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + GimmickBox - - GimmickSettingsBox - - - 16 - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 17 - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 18 - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 19 - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 20 - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 21 - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GimmickSettingsBox - - - 22 - - - 12, 209 - - - 333, 188 - - - 23 - - - Gimmick Settings - - - GimmickSettingsBox - - + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - 10 + + 11 + + + True 274, 149 @@ -2247,168 +1920,36 @@ Default: 0.5 (1/2 of a measure) 22 + + 12, 209 + + + 333, 188 + + + 23 + + + Gimmick Settings + + + GimmickSettingsBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + Top, Right True - - InitialSetSave - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 0 - - - MovieOffsetNum - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 1 - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 2 - - - OffsetNum - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 3 - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 4 - - - InitTimeSigNum2 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 5 - - - label15 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 6 - - - InitTimeSigNum1 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 7 - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 8 - - - InitialBPMNum - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 9 - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - InitialSettingsPane - - - 10 - - - 696, 27 - - - 282, 160 - - - 24 - - - Initial Chart Settings - - - InitialSettingsPane - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 9 - Bottom @@ -2706,6 +2247,30 @@ Default: 0.5 (1/2 of a measure) 10 + + 696, 27 + + + 282, 160 + + + 24 + + + Initial Chart Settings + + + InitialSettingsPane + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + True @@ -2742,66 +2307,6 @@ Default: 0.5 (1/2 of a measure) True - - MaskCenter - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MaskSettingsBox - - - 0 - - - MaskCClockwise - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MaskSettingsBox - - - 1 - - - MaskClockwise - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MaskSettingsBox - - - 2 - - - 514, 119 - - - 176, 84 - - - 26 - - - Mask Setting - - - MaskSettingsBox - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 8 - True @@ -2883,6 +2388,30 @@ Default: 0.5 (1/2 of a measure) 2 + + 514, 119 + + + 176, 84 + + + 26 + + + Mask Setting + + + MaskSettingsBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + True @@ -2949,162 +2478,6 @@ Default: 0.5 (1/2 of a measure) True - - GimmickValueLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 0 - - - GimmickTypeLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 1 - - - GimmickSubBeatLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 2 - - - GimmickBeatLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 3 - - - label22 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 4 - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 5 - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 6 - - - label19 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 7 - - - NextGimmickButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 8 - - - PrevGimmickButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 9 - - - DeleteGimmickButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PreChartViewBox - - - 10 - - - 12, 578 - - - 482, 208 - - - 28 - - - Gimmicks View - - - PreChartViewBox - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - True @@ -3429,276 +2802,36 @@ Default: 0.5 (1/2 of a measure) 10 + + 12, 578 + + + 482, 208 + + + 28 + + + Gimmicks View + + + PreChartViewBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + Bottom, Right True - - EditNoteButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 0 - - - PrevBeatButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 1 - - - NextBeatButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 2 - - - MatchNoteCheckBox - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 3 - - - MatchTimeCheckBox - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 4 - - - NotesMaskLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 5 - - - NotesSizeLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 6 - - - NotesPosLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 7 - - - NotesTypeLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 8 - - - NotesSubBeatLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 9 - - - NotesBeatLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 10 - - - label28 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 11 - - - label27 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 12 - - - label26 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 13 - - - label25 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 14 - - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 15 - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 16 - - - NextNoteButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 17 - - - PrevNoteButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 18 - - - DeleteNoteButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NotesViewBox - - - 19 - - - 508, 578 - - - 470, 208 - - - 29 - - - Notes View - - - NotesViewBox - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 6 - 238, 155 @@ -4293,6 +3426,30 @@ Default: 0.5 (1/2 of a measure) 19 + + 508, 578 + + + 470, 208 + + + 29 + + + Notes View + + + NotesViewBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + Bottom, Right @@ -4341,54 +3498,6 @@ Default: 0.5 (1/2 of a measure) True - - SizeTrackBar - - - System.Windows.Forms.TrackBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - CurrentNoteBox - - - 0 - - - PosTrackBar - - - System.Windows.Forms.TrackBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - CurrentNoteBox - - - 1 - - - 351, 209 - - - 339, 133 - - - 31 - - - Current Note Settings - - - CurrentNoteBox - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - 137, 45 @@ -4431,6 +3540,30 @@ Default: 0.5 (1/2 of a measure) 1 + + 351, 209 + + + 339, 133 + + + 31 + + + Current Note Settings + + + CurrentNoteBox + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + 491, 20 @@ -4482,6 +3615,25 @@ Default: 0.5 (1/2 of a measure) True + + True + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + 91, 55 + + + 64, 32 + + + 47 + + + Song +Volume: + VolumeLabel @@ -4494,6 +3646,15 @@ Default: 0.5 (1/2 of a measure) 1 + + 161, 59 + + + 162, 45 + + + 46 + SongVolume @@ -4506,6 +3667,21 @@ Default: 0.5 (1/2 of a measure) 3 + + True + + + 97, 102 + + + 86, 13 + + + 45 + + + Select File (.ogg) + songFileName @@ -4518,6 +3694,18 @@ Default: 0.5 (1/2 of a measure) 4 + + 6, 19 + + + 75, 23 + + + 34 + + + Play (P) + PlayButton @@ -4530,6 +3718,15 @@ Default: 0.5 (1/2 of a measure) 5 + + 87, 19 + + + 479, 45 + + + 36 + songTrackSlider @@ -4542,6 +3739,18 @@ Default: 0.5 (1/2 of a measure) 7 + + 6, 48 + + + 75, 23 + + + 37 + + + Select Song + selectSongFile @@ -4581,6 +3790,22 @@ Default: 0.5 (1/2 of a measure) True + + True + + + 6, 58 + + + 87, 30 + + + 3 + + + Highlight +Viewed Note + HighlightCheckBox @@ -5079,188 +4304,18 @@ Default: 0.5 (1/2 of a measure) System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + timer1 + + + System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + MyForm System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - 6, 58 - - - 87, 30 - - - 3 - - - Highlight -Viewed Note - - - HighlightCheckBox - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - VisualSettingsBox - - - 0 - - - 6, 19 - - - 75, 23 - - - 34 - - - Play (P) - - - PlayButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SongPlaybackBox - - - 5 - - - 87, 19 - - - 479, 45 - - - 36 - - - songTrackSlider - - - System.Windows.Forms.TrackBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SongPlaybackBox - - - 7 - - - 6, 48 - - - 75, 23 - - - 37 - - - Select Song - - - selectSongFile - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SongPlaybackBox - - - 8 - - - True - - - Microsoft Sans Serif, 9.75pt, style=Bold - - - 91, 55 - - - 64, 32 - - - 47 - - - Song -Volume: - - - VolumeLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SongPlaybackBox - - - 1 - - - 161, 59 - - - 162, 45 - - - 46 - - - SongVolume - - - System.Windows.Forms.TrackBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SongPlaybackBox - - - 3 - - - True - - - 97, 102 - - - 86, 13 - - - 45 - - - Select File (.ogg) - - - songFileName - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SongPlaybackBox - - - 4 - 650, 20 @@ -5279,4 +4334,7 @@ Volume: 181, 59 + + 345, 59 + \ No newline at end of file diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ESoundEngineOptions.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ESoundEngineOptions.h deleted file mode 100644 index df65607..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ESoundEngineOptions.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __E_IRRKLANG_SOUND_ENGINE_OPTIONS_H_INCLUDED__ -#define __E_IRRKLANG_SOUND_ENGINE_OPTIONS_H_INCLUDED__ - -namespace irrklang -{ - //! An enumeration for all options for starting up the sound engine - /** When using createIrrKlangDevice, use a combination of this these - as 'options' parameter to start up the engine. By default, irrKlang - uses ESEO_DEFAULT_OPTIONS, which is set to the combination - ESEO_MULTI_THREADED | ESEO_LOAD_PLUGINS | ESEO_USE_3D_BUFFERS | ESEO_PRINT_DEBUG_INFO_TO_DEBUGGER | ESEO_PRINT_DEBUG_INFO_TO_STDOUT. */ - enum E_SOUND_ENGINE_OPTIONS - { - //! If specified (default), it will make irrKlang run in a separate thread. - /** Using this flag, irrKlang will update - all streams, sounds, 3d positions and whatever automaticly. You also don't need to call ISoundEngine::update() - if irrKlang is running multithreaded. However, if you want to run irrKlang in the same thread - as your application (for easier debugging for example), don't set this. But you need to call ISoundEngine::update() - as often as you can (at least about 2-3 times per second) to make irrKlang update everything correctly then. */ - ESEO_MULTI_THREADED = 0x01, - - //! If the window of the application doesn't have the focus, irrKlang will be silent if this has been set. - /** This will only work when irrKlang is using the DirectSound output driver. */ - ESEO_MUTE_IF_NOT_FOCUSED = 0x02, - - //! Automaticly loads external plugins when starting up. - /** Plugins usually are .dll, .so or .dylib - files named for example ikpMP3.dll (= short for irrKlangPluginMP3) which are executed - after the startup of the sound engine and modify it for example to make it possible - to play back mp3 files. Plugins are being loaded from the current working directory - as well as from the position where the .exe using the irrKlang library resides. - It is also possible to load the plugins after the engine has started up using - ISoundEngine::loadPlugins(). */ - ESEO_LOAD_PLUGINS = 0x04, - - //! Uses 3D sound buffers instead of emulating them when playing 3d sounds (default). - /** If this flag is not specified, all buffers will by created - in 2D only and 3D positioning will be emulated in software, making the engine run - faster if hardware 3d audio is slow on the system. */ - ESEO_USE_3D_BUFFERS = 0x08, - - //! Prints debug messages to the debugger window. - /** irrKlang will print debug info and status messages to any windows debugger supporting - OutputDebugString() (like VisualStudio). - This is useful if your application does not capture any console output (see ESEO_PRINT_DEBUG_INFO_TO_STDOUT). */ - ESEO_PRINT_DEBUG_INFO_TO_DEBUGGER = 0x10, - - //! Prints debug messages to stdout (the ConsoleWindow). - /** irrKlang will print debug info and status messages stdout, the console window in Windows. */ - ESEO_PRINT_DEBUG_INFO_TO_STDOUT = 0x20, - - //! Uses linear rolloff for 3D sound. - /** If specified, instead of the default logarithmic one, irrKlang will - use a linear rolloff model which influences the attenuation - of the sounds over distance. The volume is interpolated linearly between the MinDistance - and MaxDistance, making it possible to adjust sounds more easily although this is not - physically correct. - Note that this option may not work when used together with the ESEO_USE_3D_BUFFERS - option when using Direct3D for example, irrKlang will then turn off ESEO_USE_3D_BUFFERS - automaticly to be able to use this option and write out a warning. */ - ESEO_LINEAR_ROLLOFF = 0x40, - - //! Default parameters when starting up the engine. - ESEO_DEFAULT_OPTIONS = ESEO_MULTI_THREADED | ESEO_LOAD_PLUGINS | ESEO_USE_3D_BUFFERS | ESEO_PRINT_DEBUG_INFO_TO_DEBUGGER | ESEO_PRINT_DEBUG_INFO_TO_STDOUT, - - //! Never used, it only forces the compiler to compile these enumeration values to 32 bit. - /** Don't use this. */ - ESEO_FORCE_32_BIT = 0x7fffffff - }; - -} // end namespace irrklang - - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ESoundOutputDrivers.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ESoundOutputDrivers.h deleted file mode 100644 index bc3e0ea..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ESoundOutputDrivers.h +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __E_IRRKLANG_SOUND_OUTPUT_DRIVERS_H_INCLUDED__ -#define __E_IRRKLANG_SOUND_OUTPUT_DRIVERS_H_INCLUDED__ - -namespace irrklang -{ - //! An enumeration for all types of supported sound drivers - /** Values of this enumeration can be used as parameter when calling createIrrKlangDevice(). */ - enum E_SOUND_OUTPUT_DRIVER - { - //! Autodetects the best sound driver for the system - ESOD_AUTO_DETECT = 0, - - //! DirectSound8 sound output driver, windows only. - /** In contrast to ESOD_DIRECT_SOUND, this supports sophisticated sound effects - but may not be available on old windows versions. It behaves very similar - to ESOD_DIRECT_SOUND but also supports DX8 sound effects.*/ - ESOD_DIRECT_SOUND_8, - - //! DirectSound sound output driver, windows only. - /** This uses DirectSound 3 or above, if available. If DX8 sound effects - are needed, use ESOD_DIRECT_SOUND_8 instead. The - ESOD_DIRECT_SOUND driver may be available on more and older windows - versions than ESOD_DIRECT_SOUND_8.*/ - ESOD_DIRECT_SOUND, - - //! WinMM sound output driver, windows only. - /** Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */ - ESOD_WIN_MM, - - //! ALSA sound output driver, linux only. - /** When using ESOD_ALSA in createIrrKlangDevice(), it is possible to set the third parameter, - 'deviceID' to the name of specific ALSA pcm device, to the irrKlang force to use this one. - Set it to 'default', or 'plug:hw' or whatever you need it to be. - Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */ - ESOD_ALSA, - - //! Core Audio sound output driver, mac os only. - /** Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */ - ESOD_CORE_AUDIO, - - //! Null driver, creating no sound output - ESOD_NULL, - - //! Amount of built-in sound output drivers - ESOD_COUNT, - - //! This enumeration literal is never used, it only forces the compiler to - //! compile these enumeration values to 32 bit. - ESOD_FORCE_32_BIT = 0x7fffffff - }; - -} // end namespace irrklang - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_EStreamModes.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_EStreamModes.h deleted file mode 100644 index 62d4a0f..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_EStreamModes.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __E_IRRKLANG_STREAM_MODES_H_INCLUDED__ -#define __E_IRRKLANG_STREAM_MODES_H_INCLUDED__ - -namespace irrklang -{ - //! An enumeration for all types of supported stream modes - enum E_STREAM_MODE - { - //! Autodetects the best stream mode for a specified audio data. - ESM_AUTO_DETECT = 0, - - //! Streams the audio data when needed. - ESM_STREAMING, - - //! Loads the whole audio data into the memory. - ESM_NO_STREAMING, - - //! This enumeration literal is never used, it only forces the compiler to - //! compile these enumeration values to 32 bit. - ESM_FORCE_32_BIT = 0x7fffffff - }; - -} // end namespace irrklang - - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioRecorder.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioRecorder.h deleted file mode 100644 index 49b4085..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioRecorder.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_AUDIO_RECORDER_H_INCLUDED__ -#define __I_IRRKLANG_AUDIO_RECORDER_H_INCLUDED__ - -#include "ik_IRefCounted.h" -#include "ik_ISoundSource.h" - - -namespace irrklang -{ - class ICapturedAudioDataReceiver; - - //! Interface to an audio recorder. Create it using the createIrrKlangAudioRecorder() function. - /** It creates sound sources into an ISoundEngine which then can be played there. - See @ref recordingAudio for an example on how to use this. */ - class IAudioRecorder : public virtual IRefCounted - { - public: - - //! Starts recording audio. - /** Clears all possibly previously recorded buffered audio data and starts to record. - When finished recording audio data, call stopRecordingAudio(). - All recorded audio data gets stored into an internal audio buffer, which - can then be accessed for example using addSoundSourceFromRecordedAudio() or - getRecordedAudioData(). For recording audio data not into an internal audio - buffer, use startRecordingCustomHandledAudio(). - \param sampleRate: Sample rate of the recorded audio. - \param sampleFormat: Sample format of the recorded audio. - \param channelCount: Amount of audio channels. - \return Returns true if successfully started recording and false if not.*/ - virtual bool startRecordingBufferedAudio(ik_s32 sampleRate=22000, - ESampleFormat sampleFormat=ESF_S16, - ik_s32 channelCount=1) = 0; - - //! Starts recording audio. - /** Clears all possibly previously recorded buffered audio data and starts to record - audio data, which is delivered to a custom user callback interface. - When finished recording audio data, call stopRecordingAudio(). If instead of - recording the data to the receiver interface recording into a managed buffer - is wished, use startRecordingBufferedAudio() instead. - \param receiver: Interface to be implemented by the user, gets called once for each - captured audio data chunk. - \param sampleRate: Sample rate of the recorded audio. - \param sampleFormat: Sample format of the recorded audio. - \param channelCount: Amount of audio channels. - \return Returns true if successfully started recording and false if not. */ - virtual bool startRecordingCustomHandledAudio(ICapturedAudioDataReceiver* receiver, - ik_s32 sampleRate=22000, - ESampleFormat sampleFormat=ESF_S16, - ik_s32 channelCount=1) = 0; - - //! Stops recording audio. - virtual void stopRecordingAudio() = 0; - - //! Creates a sound source for the recorded audio data. - /** The returned sound source pointer then can be used to play back the recorded audio data - using ISoundEngine::play2D(). This method only will succeed if the audio was recorded using - startRecordingBufferedAudio() and audio recording is currently stopped. - \param soundName Name of the virtual sound file (e.g. "someRecordedAudio"). You can also use this - name when calling play3D() or play2D(). */ - virtual ISoundSource* addSoundSourceFromRecordedAudio(const char* soundName) = 0; - - //! Clears recorded audio data buffer, freeing memory. - /** This method will only succeed if audio recording is currently stopped. */ - virtual void clearRecordedAudioDataBuffer() = 0; - - //! Returns if the recorder is currently recording audio. - virtual bool isRecording() = 0; - - //! Returns the audio format of the recorded audio data. - /** Also contains informations about the length of the recorded audio stream. */ - virtual SAudioStreamFormat getAudioFormat() = 0; - - //! Returns a pointer to the recorded audio data. - /** This method will only succeed if audio recording is currently stopped and - something was recorded previously using startRecordingBufferedAudio(). - The lenght of the buffer can be retrieved using - getAudioFormat().getSampleDataSize(). Note that the pointer is only valid - as long as not clearRecordedAudioDataBuffer() is called or another sample is - recorded.*/ - virtual void* getRecordedAudioData() = 0; - - //! returns the name of the sound driver, like 'ALSA' for the alsa device. - /** Possible returned strings are "NULL", "ALSA", "CoreAudio", "winMM", - "DirectSound" and "DirectSound8". */ - virtual const char* getDriverName() = 0; - }; - - - //! Interface to be implemented by the user if access to the recorded audio data is needed. - /** Is used as parameter in IAudioRecorder::startRecordingCustomHandledAudio. */ - class ICapturedAudioDataReceiver : public IRefCounted - { - public: - - //! Gets called once for each captured audio data chunk. - /** See IAudioRecorder::startRecordingCustomHandledAudio for details. - \param audioData: Pointer to a part of the recorded audio data - \param lengthInBytes: Amount of bytes in the audioData buffer.*/ - virtual void OnReceiveAudioDataStreamChunk(unsigned char* audioData, unsigned long lengthInBytes) = 0; - }; - - -} // end namespace irrklang - - -#endif diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioStream.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioStream.h deleted file mode 100644 index 97bfbd4..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioStream.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_AUDIO_STREAM_H_INCLUDED__ -#define __I_IRRKLANG_AUDIO_STREAM_H_INCLUDED__ - -#include "ik_IRefCounted.h" -#include "ik_SAudioStreamFormat.h" - -namespace irrklang -{ - - -//! Reads and decodes audio data into an usable audio stream for the ISoundEngine -class IAudioStream : public IRefCounted -{ -public: - - //! destructor - virtual ~IAudioStream() {}; - - //! returns format of the audio stream - virtual SAudioStreamFormat getFormat() = 0; - - //! sets the position of the audio stream. - /** For example to let the stream be read from the beginning of the file again, - setPosition(0) would be called. This is usually done be the sound engine to - loop a stream after if has reached the end. Return true if sucessful and 0 if not. - \param pos: Position in frames.*/ - virtual bool setPosition(ik_s32 pos) = 0; - - //! returns true if the audio stream is seekable - /* Some file formats like (MODs) don't support seeking */ - virtual bool getIsSeekingSupported() { return true; } - - //! tells the audio stream to read frameCountToRead audio frames into the specified buffer - /** \param target: Target data buffer to the method will write the read frames into. The - specified buffer will be at least getFormat().getFrameSize()*frameCountToRead bytes big. - \param frameCountToRead: amount of frames to be read. - \returns Returns amount of frames really read. Should be frameCountToRead in most cases. */ - virtual ik_s32 readFrames(void* target, ik_s32 frameCountToRead) = 0; -}; - - -} // end namespace irrklang - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioStreamLoader.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioStreamLoader.h deleted file mode 100644 index dd90ae2..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IAudioStreamLoader.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_AUDIO_STREAM_LOADER_H_INCLUDED__ -#define __I_IRRKLANG_AUDIO_STREAM_LOADER_H_INCLUDED__ - -#include "ik_IRefCounted.h" -#include "ik_IFileReader.h" - -namespace irrklang -{ - -class IAudioStream; - -//! Class which is able to create an audio file stream from a file. -class IAudioStreamLoader : public IRefCounted -{ -public: - - //! destructor - virtual ~IAudioStreamLoader() {}; - - //! Returns true if the file maybe is able to be loaded by this class. - /** This decision should be based only on the file extension (e.g. ".wav"). The given - filename string is guaranteed to be lower case. */ - virtual bool isALoadableFileExtension(const ik_c8* fileName) = 0; - - //! Creates an audio file input stream from a file - /** \return Pointer to the created audio stream. Returns 0 if loading failed. - If you no longer need the stream, you should call IAudioFileStream::drop(). - See IRefCounted::drop() for more information. */ - virtual IAudioStream* createAudioStream(IFileReader* file) = 0; -}; - - -} // end namespace irrklang - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IFileFactory.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IFileFactory.h deleted file mode 100644 index 4160acb..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IFileFactory.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_FILE_FACTORY_H_INCLUDED__ -#define __I_IRRKLANG_FILE_FACTORY_H_INCLUDED__ - -#include "ik_IRefCounted.h" - -namespace irrklang -{ - class IFileReader; - - //! Interface to overwrite file access in irrKlang. - /** Derive your own class from IFileFactory, overwrite the createFileReader() - method and return your own implemented IFileReader to overwrite file access of irrKlang. - Use ISoundEngine::addFileFactory() to let irrKlang know about your class. - Example code can be found in the tutorial 04.OverrideFileAccess. - */ - class IFileFactory : public virtual IRefCounted - { - public: - - virtual ~IFileFactory() {}; - - //! Opens a file for read access. - /** Derive your own class from IFileFactory, overwrite this - method and return your own implemented IFileReader to overwrite file access of irrKlang. - Use ISoundEngine::addFileFactory() to let irrKlang know about your class. - Example code can be found in the tutorial 04.OverrideFileAccess. - \param filename Name of file to open. - \return Returns a pointer to the created file interface. - The returned pointer should be dropped when no longer needed. - See IRefCounted::drop() for more information. Returns 0 if file cannot be opened. */ - virtual IFileReader* createFileReader(const ik_c8* filename) = 0; - }; - -} // end namespace irrklang - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IFileReader.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IFileReader.h deleted file mode 100644 index 818fe1a..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IFileReader.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_READ_FILE_H_INCLUDED__ -#define __I_IRRKLANG_READ_FILE_H_INCLUDED__ - -#include "ik_IRefCounted.h" - -namespace irrklang -{ - - //! Interface providing read acess to a file. - class IFileReader : public virtual IRefCounted - { - public: - - virtual ~IFileReader() {}; - - //! Reads an amount of bytes from the file. - //! \param buffer: Pointer to buffer where to read bytes will be written to. - //! \param sizeToRead: Amount of bytes to read from the file. - //! \return Returns how much bytes were read. - virtual ik_s32 read(void* buffer, ik_u32 sizeToRead) = 0; - - //! Changes position in file, returns true if successful. - //! \param finalPos: Destination position in the file. - //! \param relativeMovement: If set to true, the position in the file is - //! changed relative to current position. Otherwise the position is changed - //! from beginning of file. - //! \return Returns true if successful, otherwise false. - virtual bool seek(ik_s32 finalPos, bool relativeMovement = false) = 0; - - //! Returns size of file. - //! \return Returns the size of the file in bytes. - virtual ik_s32 getSize() = 0; - - //! Returns the current position in the file. - //! \return Returns the current position in the file in bytes. - virtual ik_s32 getPos() = 0; - - //! Returns name of file. - //! \return Returns the file name as zero terminated character string. - virtual const ik_c8* getFileName() = 0; - }; - -} // end namespace irrklang - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IRefCounted.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IRefCounted.h deleted file mode 100644 index f86e8b9..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IRefCounted.h +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_IREFERENCE_COUNTED_H_INCLUDED__ -#define __I_IRRKLANG_IREFERENCE_COUNTED_H_INCLUDED__ - -#include "ik_irrKlangTypes.h" - -namespace irrklang -{ - //! Base class of most objects of the irrKlang. - /** This class provides reference counting through the methods grab() and drop(). - It also is able to store a debug string for every instance of an object. - Most objects of irrKlang are derived from IRefCounted, and so they are reference counted. - - When you receive an object in irrKlang (for example an ISound using play2D() or - play3D()), and you no longer need the object, you have - to call drop(). This will destroy the object, if grab() was not called - in another part of you program, because this part still needs the object. - Note, that you only don't need to call drop() for all objects you receive, it - will be explicitely noted in the documentation. - - A simple example: - - If you want to play a sound, you may want to call the method - ISoundEngine::play2D. You call - ISound* mysound = engine->play2D("foobar.mp3", false, false true); - If you no longer need the sound interface, call mysound->drop(). The - sound may still play on after this because the engine still has a reference - to that sound, but you can be sure that it's memory will be released as soon - the sound is no longer used. - - If you want to add a sound source, you may want to call a method - ISoundEngine::addSoundSourceFromFile. You do this like - ISoundSource* mysource = engine->addSoundSourceFromFile("example.jpg"); - You will not have to drop the pointer to the source, because - sound sources are managed by the engine (it will live as long as the sound engine) and - the documentation says so. - */ - class IRefCounted - { - public: - - //! Constructor. - IRefCounted() - : ReferenceCounter(1) - { - } - - //! Destructor. - virtual ~IRefCounted() - { - } - - //! Grabs the object. Increments the reference counter by one. - //! Someone who calls grab() to an object, should later also call - //! drop() to it. If an object never gets as much drop() as grab() - //! calls, it will never be destroyed. - //! The IRefCounted class provides a basic reference counting mechanism - //! with its methods grab() and drop(). Most objects of irrklang - //! are derived from IRefCounted, and so they are reference counted. - //! - //! When you receive an object in irrKlang (for example an ISound using play2D() or - //! play3D()), and you no longer need the object, you have - //! to call drop(). This will destroy the object, if grab() was not called - //! in another part of you program, because this part still needs the object. - //! Note, that you only don't need to call drop() for all objects you receive, it - //! will be explicitely noted in the documentation. - //! - //! A simple example: - //! - //! If you want to play a sound, you may want to call the method - //! ISoundEngine::play2D. You call - //! ISound* mysound = engine->play2D("foobar.mp3", false, false true); - //! If you no longer need the sound interface, call mysound->drop(). The - //! sound may still play on after this because the engine still has a reference - //! to that sound, but you can be sure that it's memory will be released as soon - //! the sound is no longer used. - void grab() { ++ReferenceCounter; } - - //! When you receive an object in irrKlang (for example an ISound using play2D() or - //! play3D()), and you no longer need the object, you have - //! to call drop(). This will destroy the object, if grab() was not called - //! in another part of you program, because this part still needs the object. - //! Note, that you only don't need to call drop() for all objects you receive, it - //! will be explicitely noted in the documentation. - //! - //! A simple example: - //! - //! If you want to play a sound, you may want to call the method - //! ISoundEngine::play2D. You call - //! ISound* mysound = engine->play2D("foobar.mp3", false, false true); - //! If you no longer need the sound interface, call mysound->drop(). The - //! sound may still play on after this because the engine still has a reference - //! to that sound, but you can be sure that it's memory will be released as soon - //! the sound is no longer used. - bool drop() - { - --ReferenceCounter; - - if (!ReferenceCounter) - { - delete this; - return true; - } - - return false; - } - - private: - - ik_s32 ReferenceCounter; - }; - -} // end namespace irr - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISound.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISound.h deleted file mode 100644 index 3f267b9..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISound.h +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_SOUND_H_INCLUDED__ -#define __I_IRRKLANG_SOUND_H_INCLUDED__ - -#include "ik_IVirtualRefCounted.h" -#include "ik_ISoundEffectControl.h" -#include "ik_vec3d.h" - - -namespace irrklang -{ - class ISoundSource; - class ISoundStopEventReceiver; - - //! Represents a sound which is currently played. - /** The sound can be stopped, its volume or pan changed, effects added/removed - and similar using this interface. - Creating sounds is done using ISoundEngine::play2D() or ISoundEngine::play3D(). - More informations about the source of a sound can be obtained from the ISoundSource - interface. */ - class ISound : public IVirtualRefCounted - { - public: - - //! returns source of the sound which stores the filename and other informations about that sound - /** \return Returns the sound source poitner of this sound. May return 0 if the sound source - has been removed.*/ - virtual ISoundSource* getSoundSource() = 0; - - //! returns if the sound is paused - virtual void setIsPaused( bool paused = true) = 0; - - //! returns if the sound is paused - virtual bool getIsPaused() = 0; - - //! Will stop the sound and free its resources. - /** If you just want to pause the sound, use setIsPaused(). - After calling stop(), isFinished() will usually return true. - Be sure to also call ->drop() once you are done.*/ - virtual void stop() = 0; - - //! returns volume of the sound, a value between 0 (mute) and 1 (full volume). - /** (this volume gets multiplied with the master volume of the sound engine - and other parameters like distance to listener when played as 3d sound) */ - virtual ik_f32 getVolume() = 0; - - //! sets the volume of the sound, a value between 0 (mute) and 1 (full volume). - /** This volume gets multiplied with the master volume of the sound engine - and other parameters like distance to listener when played as 3d sound. */ - virtual void setVolume(ik_f32 volume) = 0; - - //! sets the pan of the sound. Takes a value between -1 and 1, 0 is center. - virtual void setPan(ik_f32 pan) = 0; - - //! returns the pan of the sound. Takes a value between -1 and 1, 0 is center. - virtual ik_f32 getPan() = 0; - - //! returns if the sound has been started to play looped - virtual bool isLooped() = 0; - - //! changes the loop mode of the sound. - /** If the sound is playing looped and it is changed to not-looped, then it - will stop playing after the loop has finished. - If it is not looped and changed to looped, the sound will start repeating to be - played when it reaches its end. - Invoking this method will not have an effect when the sound already has stopped. */ - virtual void setIsLooped(bool looped) = 0; - - //! returns if the sound has finished playing. - /** Don't mix this up with isPaused(). isFinished() returns if the sound has been - finished playing. If it has, is maybe already have been removed from the playing list of the - sound engine and calls to any other of the methods of ISound will not have any result. - If you call stop() to a playing sound will result that this function will return true - when invoked. */ - virtual bool isFinished() = 0; - - //! Sets the minimal distance if this is a 3D sound. - /** Changes the distance at which the 3D sound stops getting louder. This works - like this: As a listener approaches a 3D sound source, the sound gets louder. - Past a certain point, it is not reasonable for the volume to continue to increase. - Either the maximum (zero) has been reached, or the nature of the sound source - imposes a logical limit. This is the minimum distance for the sound source. - Similarly, the maximum distance for a sound source is the distance beyond - which the sound does not get any quieter. - The default minimum distance is 1, the default max distance is a huge number like 1000000000.0f. */ - virtual void setMinDistance(ik_f32 min) = 0; - - //! Returns the minimal distance if this is a 3D sound. - /** See setMinDistance() for details. */ - virtual ik_f32 getMinDistance() = 0; - - //! Sets the maximal distance if this is a 3D sound. - /** Changing this value is usually not necessary. Use setMinDistance() instead. - Don't change this value if you don't know what you are doing: This value causes the sound - to stop attenuating after it reaches the max distance. Most people think that this sets the - volume of the sound to 0 after this distance, but this is not true. Only change the - minimal distance (using for example setMinDistance()) to influence this. - The maximum distance for a sound source is the distance beyond which the sound does not get any quieter. - The default minimum distance is 1, the default max distance is a huge number like 1000000000.0f. */ - virtual void setMaxDistance(ik_f32 max) = 0; - - //! Returns the maximal distance if this is a 3D sound. - /** See setMaxDistance() for details. */ - virtual ik_f32 getMaxDistance() = 0; - - //! sets the position of the sound in 3d space - virtual void setPosition(vec3df position) = 0; - - //! returns the position of the sound in 3d space - virtual vec3df getPosition() = 0; - - //! sets the position of the sound in 3d space, needed for Doppler effects. - /** To use doppler effects use ISound::setVelocity to set a sounds velocity, - ISoundEngine::setListenerPosition() to set the listeners velocity and - ISoundEngine::setDopplerEffectParameters() to adjust two parameters influencing - the doppler effects intensity. */ - virtual void setVelocity(vec3df vel) = 0; - - //! returns the velocity of the sound in 3d space, needed for Doppler effects. - /** To use doppler effects use ISound::setVelocity to set a sounds velocity, - ISoundEngine::setListenerPosition() to set the listeners velocity and - ISoundEngine::setDopplerEffectParameters() to adjust two parameters influencing - the doppler effects intensity. */ - virtual vec3df getVelocity() = 0; - - //! returns the current play position of the sound in milliseconds. - /** \return Returns -1 if not implemented or possible for this sound for example - because it already has been stopped and freed internally or similar. */ - virtual ik_u32 getPlayPosition() = 0; - - //! sets the current play position of the sound in milliseconds. - /** \param pos Position in milliseconds. Must be between 0 and the value returned - by getPlayPosition(). - \return Returns true successful. False is returned for example if the sound already finished - playing and is stopped or the audio source is not seekable, for example if it - is an internet stream or a a file format not supporting seeking (a .MOD file for example). - A file can be tested if it can bee seeking using ISoundSource::getIsSeekingSupported(). */ - virtual bool setPlayPosition(ik_u32 pos) = 0; - - //! Sets the playback speed (frequency) of the sound. - /** Plays the sound at a higher or lower speed, increasing or decreasing its - frequency which makes it sound lower or higher. - Note that this feature is not available on all sound output drivers (it is on the - DirectSound drivers at least), and it does not work together with the - 'enableSoundEffects' parameter of ISoundEngine::play2D and ISoundEngine::play3D when - using DirectSound. - \param speed Factor of the speed increase or decrease. 2 is twice as fast, - 0.5 is only half as fast. The default is 1.0. - \return Returns true if sucessful, false if not. The current sound driver might not - support changing the playBack speed, or the sound was started with the - 'enableSoundEffects' parameter. */ - virtual bool setPlaybackSpeed(ik_f32 speed = 1.0f) = 0; - - //! Returns the playback speed set by setPlaybackSpeed(). Default: 1.0f. - /** See setPlaybackSpeed() for details */ - virtual ik_f32 getPlaybackSpeed() = 0; - - //! returns the play length of the sound in milliseconds. - /** Returns -1 if not known for this sound for example because its decoder - does not support length reporting or it is a file stream of unknown size. - Note: You can also use ISoundSource::getPlayLength() to get the length of - a sound without actually needing to play it. */ - virtual ik_u32 getPlayLength() = 0; - - //! Returns the sound effect control interface for this sound. - /** Sound effects such as Chorus, Distorsions, Echo, Reverb and similar can - be controlled using this. The interface pointer is only valid as long as the ISound pointer is valid. - If the ISound pointer gets dropped (IVirtualRefCounted::drop()), the ISoundEffects - may not be used any more. - \return Returns a pointer to the sound effects interface if available. The sound - has to be started via ISoundEngine::play2D() or ISoundEngine::play3D(), - with the flag enableSoundEffects=true, otherwise 0 will be returned. Note that - if the output driver does not support sound effects, 0 will be returned as well.*/ - virtual ISoundEffectControl* getSoundEffectControl() = 0; - - //! Sets the sound stop event receiver, an interface which gets called if a sound has finished playing. - /** This event is guaranteed to be called when the sound or sound stream is finished, - either because the sound reached its playback end, its sound source was removed, - ISoundEngine::stopAllSounds() has been called or the whole engine was deleted. - There is an example on how to use events in irrklang at @ref events . - \param receiver Interface to a user implementation of the sound receiver. This interface - should be as long valid as the sound exists or another stop event receiver is set. - Set this to null to set no sound stop event receiver. - \param userData: A iser data pointer, can be null. */ - virtual void setSoundStopEventReceiver(ISoundStopEventReceiver* reciever, void* userData=0) = 0; - }; - -} // end namespace irrklang - - -#endif diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundDeviceList.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundDeviceList.h deleted file mode 100644 index bda2090..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundDeviceList.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_SOUND_DEVICE_LIST_H_INCLUDED__ -#define __I_IRRKLANG_SOUND_DEVICE_LIST_H_INCLUDED__ - -#include "ik_IRefCounted.h" - -namespace irrklang -{ - -//! A list of sound devices for a sound driver. Use irrklang::createSoundDeviceList() to create this list. -/** The function createIrrKlangDevice() has a parameter 'deviceID' which takes the value returned by -ISoundDeviceList::getDeviceID() and uses that device then. -The list of devices in ISoundDeviceList usually also includes the default device which is the first -entry and has an empty deviceID string ("") and the description "default device". -There is some example code on how to use the ISoundDeviceList in @ref enumeratingDevices.*/ -class ISoundDeviceList : public IRefCounted -{ -public: - - //! Returns amount of enumerated devices in the list. - virtual ik_s32 getDeviceCount() = 0; - - //! Returns the ID of the device. Use this string to identify this device in createIrrKlangDevice(). - /** \param index Index of the device, a value between 0 and ISoundDeviceList::getDeviceCount()-1. - \return Returns a pointer to a string identifying the device. The string will only as long valid - as long as the ISoundDeviceList exists. */ - virtual const char* getDeviceID(ik_s32 index) = 0; - - //! Returns description of the device. - /** \param index Index of the device, a value between 0 and ISoundDeviceList::getDeviceCount()-1. */ - virtual const char* getDeviceDescription(ik_s32 index) = 0; -}; - - -} // end namespace irrklang - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundEffectControl.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundEffectControl.h deleted file mode 100644 index 86ade35..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundEffectControl.h +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_SOUND_EFFECT_CONTROL_H_INCLUDED__ -#define __I_IRRKLANG_SOUND_EFFECT_CONTROL_H_INCLUDED__ - -#include "ik_IVirtualRefCounted.h" -#include "ik_vec3d.h" - - -namespace irrklang -{ - //! Interface to control the active sound effects (echo, reverb,...) of an ISound object, a playing sound. - /** Sound effects such as chorus, distorsions, echo, reverb and similar can - be controlled using this. An instance of this interface can be obtained via - ISound::getSoundEffectControl(). The sound containing this interface has to be started via - ISoundEngine::play2D() or ISoundEngine::play3D() with the flag enableSoundEffects=true, - otherwise no acccess to this interface will be available. - For the DirectSound driver, these are effects available since DirectSound8. For most - effects, sounds should have a sample rate of 44 khz and should be at least - 150 milli seconds long for optimal quality when using the DirectSound driver. - Note that the interface pointer is only valid as long as - the ISound pointer is valid. If the ISound pointer gets dropped (IVirtualRefCounted::drop()), - the ISoundEffects may not be used any more. */ - class ISoundEffectControl - { - public: - - //! Disables all active sound effects - virtual void disableAllEffects() = 0; - - //! Enables the chorus sound effect or adjusts its values. - /** Chorus is a voice-doubling effect created by echoing the - original sound with a slight delay and slightly modulating the delay of the echo. - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - \param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f; - \param fDepth Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. Minimal Value:0, Maximal Value:100.0f; - \param fFeedback Percentage of output signal to feed back into the effect's input. Minimal Value:-99, Maximal Value:99.0f; - \param fFrequency Frequency of the LFO. Minimal Value:0, Maximal Value:10.0f; - \param sinusWaveForm True for sinus wave form, false for triangle. - \param fDelay Number of milliseconds the input is delayed before it is played back. Minimal Value:0, Maximal Value:20.0f; - \param lPhase Phase differential between left and right LFOs. Possible values: - -180, -90, 0, 90, 180 - \return Returns true if successful. */ - virtual bool enableChorusSoundEffect(ik_f32 fWetDryMix = 50, - ik_f32 fDepth = 10, - ik_f32 fFeedback = 25, - ik_f32 fFrequency = 1.1, - bool sinusWaveForm = true, - ik_f32 fDelay = 16, - ik_s32 lPhase = 90) = 0; - - //! removes the sound effect from the sound - virtual void disableChorusSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isChorusSoundEffectEnabled() = 0; - - //! Enables the Compressor sound effect or adjusts its values. - /** Compressor is a reduction in the fluctuation of a signal above a certain amplitude. - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - \param fGain Output gain of signal after Compressor. Minimal Value:-60, Maximal Value:60.0f; - \param fAttack Time before Compressor reaches its full value. Minimal Value:0.01, Maximal Value:500.0f; - \param fRelease Speed at which Compressor is stopped after input drops below fThreshold. Minimal Value:50, Maximal Value:3000.0f; - \param fThreshold Point at which Compressor begins, in decibels. Minimal Value:-60, Maximal Value:0.0f; - \param fRatio Compressor ratio. Minimal Value:1, Maximal Value:100.0f; - \param fPredelay Time after lThreshold is reached before attack phase is started, in milliseconds. Minimal Value:0, Maximal Value:4.0f; - \return Returns true if successful. */ - virtual bool enableCompressorSoundEffect( ik_f32 fGain = 0, - ik_f32 fAttack = 10, - ik_f32 fRelease = 200, - ik_f32 fThreshold = -20, - ik_f32 fRatio = 3, - ik_f32 fPredelay = 4) = 0; - - //! removes the sound effect from the sound - virtual void disableCompressorSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isCompressorSoundEffectEnabled() = 0; - - //! Enables the Distortion sound effect or adjusts its values. - /** Distortion is achieved by adding harmonics to the signal in such a way that, - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - as the level increases, the top of the waveform becomes squared off or clipped. - \param fGain Amount of signal change after distortion. Minimal Value:-60, Maximal Value:0; - \param fEdge Percentage of distortion intensity. Minimal Value:0, Maximal Value:100; - \param fPostEQCenterFrequency Center frequency of harmonic content addition. Minimal Value:100, Maximal Value:8000; - \param fPostEQBandwidth Width of frequency band that determines range of harmonic content addition. Minimal Value:100, Maximal Value:8000; - \param fPreLowpassCutoff Filter cutoff for high-frequency harmonics attenuation. Minimal Value:100, Maximal Value:8000; - \return Returns true if successful. */ - virtual bool enableDistortionSoundEffect(ik_f32 fGain = -18, - ik_f32 fEdge = 15, - ik_f32 fPostEQCenterFrequency = 2400, - ik_f32 fPostEQBandwidth = 2400, - ik_f32 fPreLowpassCutoff = 8000) = 0; - - //! removes the sound effect from the sound - virtual void disableDistortionSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isDistortionSoundEffectEnabled() = 0; - - //! Enables the Echo sound effect or adjusts its values. - /** An echo effect causes an entire sound to be repeated after a fixed delay. - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - \param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f; - \param fFeedback Percentage of output fed back into input. Minimal Value:0, Maximal Value:100.0f; - \param fLeftDelay Delay for left channel, in milliseconds. Minimal Value:1, Maximal Value:2000.0f; - \param fRightDelay Delay for right channel, in milliseconds. Minimal Value:1, Maximal Value:2000.0f; - \param lPanDelay Value that specifies whether to swap left and right delays with each successive echo. Minimal Value:0, Maximal Value:1; - \return Returns true if successful. */ - virtual bool enableEchoSoundEffect(ik_f32 fWetDryMix = 50, - ik_f32 fFeedback = 50, - ik_f32 fLeftDelay = 500, - ik_f32 fRightDelay = 500, - ik_s32 lPanDelay = 0) = 0; - - //! removes the sound effect from the sound - virtual void disableEchoSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isEchoSoundEffectEnabled() = 0; - - //! Enables the Flanger sound effect or adjusts its values. - /** Flange is an echo effect in which the delay between the original - signal and its echo is very short and varies over time. The result is - sometimes referred to as a sweeping sound. The term flange originated - with the practice of grabbing the flanges of a tape reel to change the speed. - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - \param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f; - \param fDepth Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. Minimal Value:0, Maximal Value:100.0f; - \param fFeedback Percentage of output signal to feed back into the effect's input. Minimal Value:-99, Maximal Value:99.0f; - \param fFrequency Frequency of the LFO. Minimal Value:0, Maximal Value:10.0f; - \param triangleWaveForm True for triangle wave form, false for square. - \param fDelay Number of milliseconds the input is delayed before it is played back. Minimal Value:0, Maximal Value:20.0f; - \param lPhase Phase differential between left and right LFOs. Possible values: - -180, -90, 0, 90, 180 - \return Returns true if successful. */ - virtual bool enableFlangerSoundEffect(ik_f32 fWetDryMix = 50, - ik_f32 fDepth = 100, - ik_f32 fFeedback = -50, - ik_f32 fFrequency = 0.25f, - bool triangleWaveForm = true, - ik_f32 fDelay = 2, - ik_s32 lPhase = 0) = 0; - - //! removes the sound effect from the sound - virtual void disableFlangerSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isFlangerSoundEffectEnabled() = 0; - - //! Enables the Gargle sound effect or adjusts its values. - /** The gargle effect modulates the amplitude of the signal. - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - \param rateHz Rate of modulation, in Hertz. Minimal Value:1, Maximal Value:1000 - \param sinusWaveForm True for sinus wave form, false for triangle. - \return Returns true if successful. */ - virtual bool enableGargleSoundEffect(ik_s32 rateHz = 20, bool sinusWaveForm = true) = 0; - - //! removes the sound effect from the sound - virtual void disableGargleSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isGargleSoundEffectEnabled() = 0; - - //! Enables the Interactive 3D Level 2 reverb sound effect or adjusts its values. - /** An implementation of the listener properties in the I3DL2 specification. Source properties are not supported. - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - \param lRoom Attenuation of the room effect, in millibels (mB). Interval: [-10000, 0] Default: -1000 mB - \param lRoomHF Attenuation of the room high-frequency effect. Interval: [-10000, 0] default: 0 mB - \param flRoomRolloffFactor Rolloff factor for the reflected signals. Interval: [0.0, 10.0] default: 0.0 - \param flDecayTime Decay time, in seconds. Interval: [0.1, 20.0] default: 1.49s - \param flDecayHFRatio Ratio of the decay time at high frequencies to the decay time at low frequencies. Interval: [0.1, 2.0] default: 0.83 - \param lReflections Attenuation of early reflections relative to lRoom. Interval: [-10000, 1000] default: -2602 mB - \param flReflectionsDelay Delay time of the first reflection relative to the direct path in seconds. Interval: [0.0, 0.3] default: 0.007 s - \param lReverb Attenuation of late reverberation relative to lRoom, in mB. Interval: [-10000, 2000] default: 200 mB - \param flReverbDelay Time limit between the early reflections and the late reverberation relative to the time of the first reflection. Interval: [0.0, 0.1] default: 0.011 s - \param flDiffusion Echo density in the late reverberation decay in percent. Interval: [0.0, 100.0] default: 100.0 % - \param flDensity Modal density in the late reverberation decay, in percent. Interval: [0.0, 100.0] default: 100.0 % - \param flHFReference Reference high frequency, in hertz. Interval: [20.0, 20000.0] default: 5000.0 Hz - \return Returns true if successful. */ - virtual bool enableI3DL2ReverbSoundEffect(ik_s32 lRoom = -1000, - ik_s32 lRoomHF = -100, - ik_f32 flRoomRolloffFactor = 0, - ik_f32 flDecayTime = 1.49f, - ik_f32 flDecayHFRatio = 0.83f, - ik_s32 lReflections = -2602, - ik_f32 flReflectionsDelay = 0.007f, - ik_s32 lReverb = 200, - ik_f32 flReverbDelay = 0.011f, - ik_f32 flDiffusion = 100.0f, - ik_f32 flDensity = 100.0f, - ik_f32 flHFReference = 5000.0f ) = 0; - - //! removes the sound effect from the sound - virtual void disableI3DL2ReverbSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isI3DL2ReverbSoundEffectEnabled() = 0; - - //! Enables the ParamEq sound effect or adjusts its values. - /** Parametric equalizer amplifies or attenuates signals of a given frequency. - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - \param fCenter Center frequency, in hertz, The default value is 8000. Minimal Value:80, Maximal Value:16000.0f - \param fBandwidth Bandwidth, in semitones, The default value is 12. Minimal Value:1.0f, Maximal Value:36.0f - \param fGain Gain, default value is 0. Minimal Value:-15.0f, Maximal Value:15.0f - \return Returns true if successful. */ - virtual bool enableParamEqSoundEffect(ik_f32 fCenter = 8000, - ik_f32 fBandwidth = 12, - ik_f32 fGain = 0) = 0; - - //! removes the sound effect from the sound - virtual void disableParamEqSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isParamEqSoundEffectEnabled() = 0; - - //! Enables the Waves Reverb sound effect or adjusts its values. - /** \param fInGain Input gain of signal, in decibels (dB). Min/Max: [-96.0,0.0] Default: 0.0 dB. - If this sound effect is already enabled, calling this only modifies the parameters of the active effect. - \param fReverbMix Reverb mix, in dB. Min/Max: [-96.0,0.0] Default: 0.0 dB - \param fReverbTime Reverb time, in milliseconds. Min/Max: [0.001,3000.0] Default: 1000.0 ms - \param fHighFreqRTRatio High-frequency reverb time ratio. Min/Max: [0.001,0.999] Default: 0.001 - \return Returns true if successful. */ - virtual bool enableWavesReverbSoundEffect(ik_f32 fInGain = 0, - ik_f32 fReverbMix = 0, - ik_f32 fReverbTime = 1000, - ik_f32 fHighFreqRTRatio = 0.001f) = 0; - - //! removes the sound effect from the sound - virtual void disableWavesReverbSoundEffect() = 0; - - //! returns if the sound effect is active on the sound - virtual bool isWavesReverbSoundEffectEnabled() = 0; - }; - -} // end namespace irrklang - - -#endif diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundEngine.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundEngine.h deleted file mode 100644 index fdb25e8..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundEngine.h +++ /dev/null @@ -1,436 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_SOUND_ENGINE_H_INCLUDED__ -#define __I_IRRKLANG_SOUND_ENGINE_H_INCLUDED__ - -#include "ik_IRefCounted.h" -#include "ik_vec3d.h" -#include "ik_ISoundSource.h" -#include "ik_ISound.h" -#include "ik_EStreamModes.h" -#include "ik_IFileFactory.h" -#include "ik_ISoundMixedOutputReceiver.h" - - -namespace irrklang -{ - class IAudioStreamLoader; - struct SInternalAudioInterface; - - //! Interface to the sound engine, for playing 3d and 2d sound and music. - /** This is the main interface of irrKlang. You usually would create this using - the createIrrKlangDevice() function. - */ - class ISoundEngine : public virtual irrklang::IRefCounted - { - public: - - //! returns the name of the sound driver, like 'ALSA' for the alsa device - /** Possible returned strings are "NULL", "ALSA", "CoreAudio", "winMM", - "DirectSound" and "DirectSound8". */ - virtual const char* getDriverName() = 0; - - //! loads a sound source (if not loaded already) from a file and plays it. - /** \param sourceFileName Filename of sound, like "sounds/test.wav" or "foobar.ogg". - \param playLooped plays the sound in loop mode. If set to 'false', the sound is played once, then stopped and deleted from the internal playing list. Calls to - ISound have no effect after such a non looped sound has been stopped automaticly. - \param startPaused starts the sound paused. This implies that track=true. Use this if you want to modify some of the playing - parameters before the sound actually plays. Usually you would set this parameter to true, then use the ISound interface to - modify some of the sound parameters and then call ISound::setPaused(false); - Note: You need to call ISound::drop() when setting this parameter to true and you don't need the ISound - object anymore. See 'return' for details. - \param track Makes it possible to track the sound. Causes the method to return an ISound interface. See 'return' for details. - \param streamMode Specifies if the file should be streamed or loaded completely into memory for playing. - ESM_AUTO_DETECT sets this to autodetection. Note: if the sound has been loaded or played before into the - engine, this parameter has no effect. - \param enableSoundEffects Makes it possible to use sound effects such as chorus, distorsions, echo, - reverb and similar for this sound. Sound effects can then be controlled via ISound::getSoundEffectControl(). - Only enable if necessary. - \return Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or - 'enableSoundEffects' have been set to true. Note: if this method returns an ISound as result, - you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this - will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or - 'enableSoundEffects' have been set to true, if the sound could not be played.*/ - virtual ISound* play2D(const char* soundFileName, - bool playLooped = false, - bool startPaused = false, - bool track = false, - E_STREAM_MODE streamMode = ESM_AUTO_DETECT, - bool enableSoundEffects = false) = 0; - - //! Plays a sound source as 2D sound with its default settings stored in ISoundSource. - /** An ISoundSource object will be created internally when playing a sound the first time, - or can be added with getSoundSource(). - \param source The sound source, specifiying sound file source and default settings for this file. - Use the other ISoundEngine::play2D() overloads if you want to specify a filename string instead of this. - \param playLooped plays the sound in loop mode. If set to 'false', the sound is played once, then stopped and deleted from the internal playing list. Calls to - ISound have no effect after such a non looped sound has been stopped automaticly. - \param startPaused starts the sound paused. This implies that track=true. Use this if you want to modify some of the playing - parameters before the sound actually plays. Usually you would set this parameter to true, then use the ISound interface to - modify some of the sound parameters and then call ISound::setPaused(false); - Note: You need to call ISound::drop() when setting this parameter to true and you don't need the ISound - object anymore. See 'return' for details. - \param track Makes it possible to track the sound. Causes the method to return an ISound interface. See 'return' for details. - \param enableSoundEffects Makes it possible to use sound effects such as chorus, distorsions, echo, - reverb and similar for this sound. Sound effects can then be controlled via ISound::getSoundEffectControl(). - Only enable if necessary. - \return Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or - 'enableSoundEffects' have been set to true. Note: if this method returns an ISound as result, - you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this - will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or - 'enableSoundEffects' have been set to true, if the sound could not be played.*/ - virtual ISound* play2D(ISoundSource* source, - bool playLooped = false, - bool startPaused = false, - bool track = false, - bool enableSoundEffects = false) = 0; - - //! Loads a sound source (if not loaded already) from a file and plays it as 3D sound. - /** There is some example code on how to work with 3D sound at @ref sound3d. - \param sourceFileName Filename of sound, like "sounds/test.wav" or "foobar.ogg". - \param pos Position of the 3D sound. - \param playLooped plays the sound in loop mode. If set to 'false', the sound is played once, then stopped and deleted from the internal playing list. Calls to - ISound have no effect after such a non looped sound has been stopped automaticly. - \param startPaused starts the sound paused. This implies that track=true. Use this if you want to modify some of the playing - parameters before the sound actually plays. Usually you would set this parameter to true, then use the ISound interface to - modify some of the sound parameters and then call ISound::setPaused(false); - Note: You need to call ISound::drop() when setting this parameter to true and you don't need the ISound - object anymore. See 'return' for details. - \param track Makes it possible to track the sound. Causes the method to return an ISound interface. See 'return' for details. - \param streamMode Specifies if the file should be streamed or loaded completely into memory for playing. - ESM_AUTO_DETECT sets this to autodetection. Note: if the sound has been loaded or played before into the - engine, this parameter has no effect. - \param enableSoundEffects Makes it possible to use sound effects such as chorus, distorsions, echo, - reverb and similar for this sound. Sound effects can then be controlled via ISound::getSoundEffectControl(). - Only enable if necessary. - \return Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or - 'enableSoundEffects' have been set to true. Note: if this method returns an ISound as result, - you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this - will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or - 'enableSoundEffects' have been set to true, if the sound could not be played.*/ - virtual ISound* play3D(const char* soundFileName, vec3df pos, - bool playLooped = false, - bool startPaused = false, - bool track = false, - E_STREAM_MODE streamMode = ESM_AUTO_DETECT, - bool enableSoundEffects = false) = 0; - - //! Plays a sound source as 3D sound with its default settings stored in ISoundSource. - /** An ISoundSource object will be created internally when playing a sound the first time, - or can be added with getSoundSource(). There is some example code on how to work with 3D sound @ref sound3d. - \param source The sound source, specifiying sound file source and default settings for this file. - Use the other ISoundEngine::play2D() overloads if you want to specify a filename string instead of this. - \param pos Position of the 3D sound. - \param playLooped plays the sound in loop mode. If set to 'false', the sound is played once, then stopped and deleted from the internal playing list. Calls to - ISound have no effect after such a non looped sound has been stopped automaticly. - \param startPaused starts the sound paused. This implies that track=true. Use this if you want to modify some of the playing - parameters before the sound actually plays. Usually you would set this parameter to true, then use the ISound interface to - modify some of the sound parameters and then call ISound::setPaused(false); - Note: You need to call ISound::drop() when setting this parameter to true and you don't need the ISound - object anymore. See 'return' for details. - \param track Makes it possible to track the sound. Causes the method to return an ISound interface. See 'return' for details. - \param enableSoundEffects Makes it possible to use sound effects such as chorus, distorsions, echo, - reverb and similar for this sound. Sound effects can then be controlled via ISound::getSoundEffectControl(). - Only enable if necessary. - \return Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or - 'enableSoundEffects' have been set to true. Note: if this method returns an ISound as result, - you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this - will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or - 'enableSoundEffects' have been set to true, if the sound could not be played.*/ - virtual ISound* play3D(ISoundSource* source, vec3df pos, - bool playLooped = false, - bool startPaused = false, - bool track = false, - bool enableSoundEffects = false) = 0; - - //! Stops all currently playing sounds. - virtual void stopAllSounds() = 0; - - //! Pauses or unpauses all currently playing sounds. - virtual void setAllSoundsPaused( bool bPaused = true ) = 0; - - //! Gets a sound source by sound name. Adds the sound source as file into the sound engine if not loaded already. - /** Please note: For performance reasons most ISoundEngine implementations will - not try to load the sound when calling this method, but only when play() is called - with this sound source as parameter. - \param addIfNotFound if 'true' adds the sound source to the list and returns the interface to it - if it cannot be found in the sound source list. If 'false', returns 0 if the sound - source is not in the list and does not modify the list. Default value: true. - \return Returns the sound source or 0 if not available. - Note: Don't call drop() to this pointer, it will be managed by irrKlang and - exist as long as you don't delete irrKlang or call removeSoundSource(). However, - you are free to call grab() if you want and drop() it then later of course. */ - virtual ISoundSource* getSoundSource(const ik_c8* soundName, bool addIfNotFound=true) = 0; - - //! Returns a sound source by index. - /** \param idx: Index of the loaded sound source, must by smaller than getSoundSourceCount(). - \return Returns the sound source or 0 if not available. - Note: Don't call drop() to this pointer, it will be managed by irrKlang and - exist as long as you don't delete irrKlang or call removeSoundSource(). However, - you are free to call grab() if you want and drop() it then later of course. */ - virtual ISoundSource* getSoundSource(ik_s32 index) = 0; - - //! Returns amount of loaded sound sources. - virtual ik_s32 getSoundSourceCount() = 0; - - //! Adds sound source into the sound engine as file. - /** \param fileName Name of the sound file (e.g. "sounds/something.mp3"). You can also use this - name when calling play3D() or play2D(). - \param mode Streaming mode for this sound source - \param preload If this flag is set to false (which is default) the sound engine will - not try to load the sound file when calling this method, but only when play() is called - with this sound source as parameter. Otherwise the sound will be preloaded. - \return Returns the pointer to the added sound source or 0 if not sucessful because for - example a sound already existed with that name. If not successful, the reason will be printed - into the log. Note: Don't call drop() to this pointer, it will be managed by irrKlang and - exist as long as you don't delete irrKlang or call removeSoundSource(). However, - you are free to call grab() if you want and drop() it then later of course. */ - virtual ISoundSource* addSoundSourceFromFile(const ik_c8* fileName, E_STREAM_MODE mode=ESM_AUTO_DETECT, - bool preload=false) = 0; - - //! Adds a sound source into the sound engine as memory source. - /** Note: This method only accepts a file (.wav, .ogg, etc) which is totally loaded into memory. - If you want to add a sound source from decoded plain PCM data in memory, use addSoundSourceFromPCMData() instead. - \param memory Pointer to the memory to be treated as loaded sound file. - \param sizeInBytes Size of the memory chunk, in bytes. - \param soundName Name of the virtual sound file (e.g. "sounds/something.mp3"). You can also use this - name when calling play3D() or play2D(). Hint: If you include the extension of the original file - like .ogg, .mp3 or .wav at the end of the filename, irrKlang will be able to decide better what - file format it is and might be able to start playback faster. - \param copyMemory If set to true which is default, the memory block is copied - and stored in the engine, after calling addSoundSourceFromMemory() the memory pointer can be deleted - savely. If set to false, the memory is not copied and the user takes the responsibility that - the memory block pointed to remains there as long as the sound engine or at least this sound - source exists. - \return Returns the pointer to the added sound source or 0 if not sucessful because for example a sound already - existed with that name. If not successful, the reason will be printed into the log. - Note: Don't call drop() to this pointer, it will be managed by irrKlang and exist as long as you don't - delete irrKlang or call removeSoundSource(). However, you are free to call grab() if you - want and drop() it then later of course. */ - virtual ISoundSource* addSoundSourceFromMemory(void* memory, ik_s32 sizeInBytes, const ik_c8* soundName, - bool copyMemory=true) = 0; - - - //! Adds a sound source into the sound engine from plain PCM data in memory. - /** \param memory Pointer to the memory to be treated as loaded sound file. - \param sizeInBytes Size of the memory chunk, in bytes. - \param soundName Name of the virtual sound file (e.g. "sounds/something.mp3"). You can also use this - name when calling play3D() or play2D(). - \param copyMemory If set to true which is default, the memory block is copied - and stored in the engine, after calling addSoundSourceFromPCMData() the memory pointer can be deleted - savely. If set to true, the memory is not copied and the user takes the responsibility that - the memory block pointed to remains there as long as the sound engine or at least this sound - source exists. - \return Returns the pointer to the added sound source or 0 if not sucessful because for - example a sound already existed with that name. If not successful, the reason will be printed - into the log. */ - virtual ISoundSource* addSoundSourceFromPCMData(void* memory, ik_s32 sizeInBytes, - const ik_c8* soundName, SAudioStreamFormat format, - bool copyMemory=true) = 0; - - //! Adds a sound source as alias for an existing sound source, but with a different name or optional different default settings. - /** This is useful if you want to play multiple sounds but each sound isn't necessarily one single file. - Also useful if you want to or play the same sound using different names, volumes or min and max 3D distances. - \param baseSource The sound source where this sound source should be based on. This sound - source will use the baseSource as base to access the file and similar, but it will have its - own name and its own default settings. - \param soundName Name of the new sound source to be added. - \return Returns the pointer to the added sound source or 0 if not sucessful because for - example a sound already existed with that name. If not successful, the reason will be printed - into the log.*/ - virtual ISoundSource* addSoundSourceAlias(ISoundSource* baseSource, const ik_c8* soundName) = 0; - - //! Removes a sound source from the engine, freeing the memory it occupies. - /** This will also cause all currently playing sounds of this source to be stopped. - Also note that if the source has been removed successfully, the value returned - by getSoundSourceCount() will have been decreased by one. - Removing sound sources is only necessary if you know you won't use a lot of non-streamed - sounds again. Sound sources of streamed sounds do not cost a lot of memory.*/ - virtual void removeSoundSource(ISoundSource* source) = 0; - - //! Removes a sound source from the engine, freeing the memory it occupies. - /** This will also cause all currently playing sounds of this source to be stopped. - Also note that if the source has been removed successfully, the value returned - by getSoundSourceCount() will have been decreased by one. - Removing sound sources is only necessary if you know you won't use a lot of non-streamed - sounds again. Sound sources of streamed sounds do not cost a lot of memory. */ - virtual void removeSoundSource(const ik_c8* name) = 0; - - //! Removes all sound sources from the engine - /** This will also cause all sounds to be stopped. - Removing sound sources is only necessary if you know you won't use a lot of non-streamed - sounds again. Sound sources of streamed sounds do not cost a lot of memory. */ - virtual void removeAllSoundSources() = 0; - - //! Sets master sound volume. This value is multiplied with all sounds played. - /** \param volume 0 (silent) to 1.0f (full volume) */ - virtual void setSoundVolume(ik_f32 volume) = 0; - - //! Returns master sound volume. - /* A value between 0.0 and 1.0. Default is 1.0. Can be changed using setSoundVolume(). */ - virtual ik_f32 getSoundVolume() = 0; - - //! Sets the current listener 3d position. - /** When playing sounds in 3D, updating the position of the listener every frame should be - done using this function. - \param pos Position of the camera or listener. - \param lookdir Direction vector where the camera or listener is looking into. If you have a - camera position and a target 3d point where it is looking at, this would be cam->getTarget() - cam->getAbsolutePosition(). - \param velPerSecond The velocity per second describes the speed of the listener and - is only needed for doppler effects. - \param upvector Vector pointing 'up', so the engine can decide where is left and right. - This vector is usually (0,1,0).*/ - virtual void setListenerPosition(const vec3df& pos, - const vec3df& lookdir, - const vec3df& velPerSecond = vec3df(0,0,0), - const vec3df& upVector = vec3df(0,1,0)) = 0; - - //! Updates the audio engine. This should be called several times per frame if irrKlang was started in single thread mode. - /** This updates the 3d positions of the sounds as well as their volumes, effects, - streams and other stuff. Call this several times per frame (the more the better) if you - specified irrKlang to run single threaded. Otherwise it is not necessary to use this method. - This method is being called by the scene manager automaticly if you are using one, so - you might want to ignore this. */ - virtual void update() = 0; - - //! Returns if a sound with the specified name is currently playing. - virtual bool isCurrentlyPlaying(const char* soundName) = 0; - - //! Returns if a sound with the specified source is currently playing. - virtual bool isCurrentlyPlaying(ISoundSource* source) = 0; - - //! Stops all sounds of a specific sound source - virtual void stopAllSoundsOfSoundSource(ISoundSource* source) = 0; - - //! Registers a new audio stream loader in the sound engine. - /** Use this to enhance the audio engine to support other or new file formats. - To do this, implement your own IAudioStreamLoader interface and register it - with this method */ - virtual void registerAudioStreamLoader(IAudioStreamLoader* loader) = 0; - - //! Returns if irrKlang is running in the same thread as the application or is using multithreading. - /** This basicly returns the flag set by the user when creating the sound engine.*/ - virtual bool isMultiThreaded() const = 0; - - //! Adds a file factory to the sound engine, making it possible to override file access of the sound engine. - /** Derive your own class from IFileFactory, overwrite the createFileReader() - method and return your own implemented IFileReader to overwrite file access of irrKlang. */ - virtual void addFileFactory(IFileFactory* fileFactory) = 0; - - //! Sets the default minimal distance for 3D sounds. - /** This value influences how loud a sound is heard based on its distance. - See ISound::setMinDistance() for details about what the min distance is. - It is also possible to influence this default value for every sound file - using ISoundSource::setDefaultMinDistance(). - This method only influences the initial distance value of sounds. For changing the - distance after the sound has been started to play, use ISound::setMinDistance() and ISound::setMaxDistance(). - \param minDistance Default minimal distance for 3d sounds. The default value is 1.0f.*/ - virtual void setDefault3DSoundMinDistance(ik_f32 minDistance) = 0; - - //! Returns the default minimal distance for 3D sounds. - /** This value influences how loud a sound is heard based on its distance. - You can change it using setDefault3DSoundMinDistance(). - See ISound::setMinDistance() for details about what the min distance is. - It is also possible to influence this default value for every sound file - using ISoundSource::setDefaultMinDistance(). - \return Default minimal distance for 3d sounds. The default value is 1.0f. */ - virtual ik_f32 getDefault3DSoundMinDistance() = 0; - - //! Sets the default maximal distance for 3D sounds. - /** Changing this value is usually not necessary. Use setDefault3DSoundMinDistance() instead. - Don't change this value if you don't know what you are doing: This value causes the sound - to stop attenuating after it reaches the max distance. Most people think that this sets the - volume of the sound to 0 after this distance, but this is not true. Only change the - minimal distance (using for example setDefault3DSoundMinDistance()) to influence this. - See ISound::setMaxDistance() for details about what the max distance is. - It is also possible to influence this default value for every sound file - using ISoundSource::setDefaultMaxDistance(). - This method only influences the initial distance value of sounds. For changing the - distance after the sound has been started to play, use ISound::setMinDistance() and ISound::setMaxDistance(). - \param maxDistance Default maximal distance for 3d sounds. The default value is 1000000000.0f. */ - virtual void setDefault3DSoundMaxDistance(ik_f32 maxDistance) = 0; - - //! Returns the default maximal distance for 3D sounds. - /** This value influences how loud a sound is heard based on its distance. - You can change it using setDefault3DSoundmaxDistance(), but - changing this value is usually not necessary. This value causes the sound - to stop attenuating after it reaches the max distance. Most people think that this sets the - volume of the sound to 0 after this distance, but this is not true. Only change the - minimal distance (using for example setDefault3DSoundMinDistance()) to influence this. - See ISound::setMaxDistance() for details about what the max distance is. - It is also possible to influence this default value for every sound file - using ISoundSource::setDefaultMaxDistance(). - \return Default maximal distance for 3d sounds. The default value is 1000000000.0f. */ - virtual ik_f32 getDefault3DSoundMaxDistance() = 0; - - //! Sets a rolloff factor which influences the amount of attenuation that is applied to 3D sounds. - /** The rolloff factor can range from 0.0 to 10.0, where 0 is no rolloff. 1.0 is the default - rolloff factor set, the value which we also experience in the real world. A value of 2 would mean - twice the real-world rolloff. */ - virtual void setRolloffFactor(ik_f32 rolloff) = 0; - - //! Sets parameters affecting the doppler effect. - /** \param dopplerFactor is a value between 0 and 10 which multiplies the doppler - effect. Default value is 1.0, which is the real world doppler effect, and 10.0f - would be ten times the real world doppler effect. - \param distanceFactor is the number of meters in a vector unit. The default value - is 1.0. Doppler effects are calculated in meters per second, with this parameter, - this can be changed, all velocities and positions are influenced by this. If - the measurement should be in foot instead of meters, set this value to 0.3048f - for example.*/ - virtual void setDopplerEffectParameters(ik_f32 dopplerFactor=1.0f, ik_f32 distanceFactor=1.0f) = 0; - - //! Loads irrKlang plugins from a custom path. - /** Plugins usually are .dll, .so or .dylib - files named for example ikpMP3.dll (= short for irrKlangPluginMP3) which - make it possible to play back mp3 files. Plugins are being - loaded from the current working directory at startup of the sound engine - if the parameter ESEO_LOAD_PLUGINS is set (which it is by default), but - using this method, it is possible to load plugins from a custom path in addition. - \param path Path to the plugin directory, like "C:\games\somegamegame\irrklangplugins". - \return returns true if sucessful or fals if not, for example because the path could - not be found. */ - virtual bool loadPlugins(const ik_c8* path) = 0; - - //! Returns a pointer to internal sound engine pointers, like the DirectSound interface. - /** Use this with caution. This is only exposed to make it possible for other libraries - such as Video playback packages to extend or use the sound driver irrklang uses. */ - virtual const SInternalAudioInterface& getInternalAudioInterface() = 0; - - //! Sets the OutputMixedDataReceiver, so you can receive the pure mixed output audio data while it is being played. - /** This can be used to store the sound output as .wav file or for creating a Oscillograph or similar. - This works only with software based audio drivers, that is ESOD_WIN_MM, ESOD_ALSA, and ESOD_CORE_AUDIO. - Returns true if sucessful and fals if the current audio driver doesn't support this feature. Set this to null - again once you don't need it anymore. */ - virtual bool setMixedDataOutputReceiver(ISoundMixedOutputReceiver* receiver) = 0; - }; - - - //! structure for returning pointers to the internal audio interface. - /** Use ISoundEngine::getInternalAudioInterface() to get this. */ - struct SInternalAudioInterface - { - //! IDirectSound interface, this is not null when using the ESOD_DIRECT_SOUND audio driver - void* pIDirectSound; - - //! IDirectSound8 interface, this is not null when using the ESOD_DIRECT_SOUND8 audio driver - void* pIDirectSound8; - - //! HWaveout interface, this is not null when using the ESOD_WIN_MM audio driver - void* pWinMM_HWaveOut; - - //! ALSA PCM Handle interface, this is not null when using the ESOD_ALSA audio driver - void* pALSA_SND_PCM; - - //! AudioDeviceID handle, this is not null when using the ESOD_CORE_AUDIO audio driver - ik_u32 pCoreAudioDeciceID; - }; - - - -} // end namespace irrklang - - -#endif diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundMixedOutputReceiver.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundMixedOutputReceiver.h deleted file mode 100644 index 8f6d58e..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundMixedOutputReceiver.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_SOUND_MIXED_OUTPUT_RECEIVER_H_INCLUDED__ -#define __I_IRRKLANG_SOUND_MIXED_OUTPUT_RECEIVER_H_INCLUDED__ - -#include "ik_IRefCounted.h" -#include "ik_SAudioStreamFormat.h" - - -namespace irrklang -{ - - -//! Interface to be implemented by the user, which recieves the mixed output when it it played by the sound engine. -/** This can be used to store the sound output as .wav file or for creating a Oscillograph or similar. - Simply implement your own class derived from ISoundMixedOutputReceiver and use ISoundEngine::setMixedDataOutputReceiver - to let the audio driver know about it. */ -class ISoundMixedOutputReceiver -{ -public: - - //! destructor - virtual ~ISoundMixedOutputReceiver() {}; - - //! Called when a chunk of sound has been mixed and is about to be played. - /** Note: This is called from the playing thread of the sound library, so you need to - make everything you are doing in this method thread safe. Additionally, it would - be a good idea to do nothing complicated in your implementation and return as fast as possible, - otherwise sound output may be stuttering. - \param data representing the sound frames which just have been mixed. Sound data always - consists of two interleaved sound channels at 16bit per frame. - \param byteCount Amount of bytes of the data - \param playbackrate The playback rate at samples per second (usually something like 44000). - This value will not change and always be the same for an instance of an ISoundEngine. */ - virtual void OnAudioDataReady(const void* data, int byteCount, int playbackrate) = 0; - -}; - - -} // end namespace irrklang - - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundSource.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundSource.h deleted file mode 100644 index 087d295..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundSource.h +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_IRR_SOUND_SOURCE_H_INCLUDED__ -#define __I_IRRKLANG_IRR_SOUND_SOURCE_H_INCLUDED__ - -#include "ik_IVirtualRefCounted.h" -#include "ik_vec3d.h" -#include "ik_EStreamModes.h" -#include "ik_SAudioStreamFormat.h" - - -namespace irrklang -{ - - //! A sound source describes an input file (.ogg, .mp3, .wav or similar) and its default settings. - /** It provides some informations about the sound source like the play lenght and - can have default settings for volume, distances for 3d etc. There is some example code on how - to use Sound sources at @ref soundSources.*/ - class ISoundSource : public IVirtualRefCounted - { - public: - - //! Returns the name of the sound source (usually, this is the file name) - virtual const ik_c8* getName() = 0; - - //! Sets the stream mode which should be used for a sound played from this source. - /** Note that if this is set to ESM_NO_STREAMING, the engine still might decide - to stream the sound if it is too big. The threashold for this can be - adjusted using ISoundSource::setForcedStreamingThreshold(). */ - virtual void setStreamMode(E_STREAM_MODE mode) = 0; - - //! Returns the detected or set type of the sound with wich the sound will be played. - /** Note: If the returned type is ESM_AUTO_DETECT, this mode will change after the - sound has been played the first time. */ - virtual E_STREAM_MODE getStreamMode() = 0; - - //! Returns the play length of the sound in milliseconds. - /** Returns -1 if not known for this sound for example because its decoder - does not support lenght reporting or it is a file stream of unknown size. - Note: If the sound never has been played before, the sound engine will have to open - the file and try to get the play lenght from there, so this call could take a bit depending - on the type of file. */ - virtual ik_u32 getPlayLength() = 0; - - //! Returns informations about the sound source: channel count (mono/stereo), frame count, sample rate, etc. - /** \return Returns the structure filled with 0 or negative values if not known for this sound for example because - because the file could not be opened or similar. - Note: If the sound never has been played before, the sound engine will have to open - the file and try to get the play lenght from there, so this call could take a bit depending - on the type of file. */ - virtual SAudioStreamFormat getAudioFormat() = 0; - - //! Returns if sounds played from this source will support seeking via ISound::setPlayPosition(). - /* If a sound is seekable depends on the file type and the audio format. For example MOD files - cannot be seeked currently. - \return Returns true of the sound source supports setPlayPosition() and false if not. - Note: If the sound never has been played before, the sound engine will have to open - the file and try to get the information from there, so this call could take a bit depending - on the type of file. */ - virtual bool getIsSeekingSupported() = 0; - - //! Sets the default volume for a sound played from this source. - /** The default value of this is 1.0f. - Note that the default volume is being multiplied with the master volume - of ISoundEngine, change this via ISoundEngine::setSoundVolume(). - //! \param volume 0 (silent) to 1.0f (full volume). Default value is 1.0f. */ - virtual void setDefaultVolume(ik_f32 volume=1.0f) = 0; - - //! Returns the default volume for a sound played from this source. - /** You can influence this default volume value using setDefaultVolume(). - Note that the default volume is being multiplied with the master volume - of ISoundEngine, change this via ISoundEngine::setSoundVolume(). - //! \return 0 (silent) to 1.0f (full volume). Default value is 1.0f. */ - virtual ik_f32 getDefaultVolume() = 0; - - //! sets the default minimal distance for 3D sounds played from this source. - /** This value influences how loud a sound is heard based on its distance. - See ISound::setMinDistance() for details about what the min distance is. - This method only influences the initial distance value of sounds. For changing the - distance while the sound is playing, use ISound::setMinDistance() and ISound::setMaxDistance(). - \param minDistance: Default minimal distance for 3D sounds from this source. Set it to a negative - value to let sounds of this source use the engine level default min distance, which - can be set via ISoundEngine::setDefault3DSoundMinDistance(). Default value is -1, causing - the default min distance of the sound engine to take effect. */ - virtual void setDefaultMinDistance(ik_f32 minDistance) = 0; - - //! Returns the default minimal distance for 3D sounds played from this source. - /** This value influences how loud a sound is heard based on its distance. - See ISound::setMinDistance() for details about what the minimal distance is. - \return Default minimal distance for 3d sounds from this source. If setDefaultMinDistance() - was set to a negative value, it will return the default value set in the engine, - using ISoundEngine::setDefault3DSoundMinDistance(). Default value is -1, causing - the default min distance of the sound engine to take effect. */ - virtual ik_f32 getDefaultMinDistance() = 0; - - //! Sets the default maximal distance for 3D sounds played from this source. - /** Changing this value is usually not necessary. Use setDefaultMinDistance() instead. - Don't change this value if you don't know what you are doing: This value causes the sound - to stop attenuating after it reaches the max distance. Most people think that this sets the - volume of the sound to 0 after this distance, but this is not true. Only change the - minimal distance (using for example setDefaultMinDistance()) to influence this. - See ISound::setMaxDistance() for details about what the max distance is. - This method only influences the initial distance value of sounds. For changing the - distance while the sound is played, use ISound::setMinDistance() - and ISound::setMaxDistance(). - \param maxDistance Default maximal distance for 3D sounds from this source. Set it to a negative - value to let sounds of this source use the engine level default max distance, which - can be set via ISoundEngine::setDefault3DSoundMaxDistance(). Default value is -1, causing - the default max distance of the sound engine to take effect. */ - virtual void setDefaultMaxDistance(ik_f32 maxDistance) = 0; - - //! returns the default maxmial distance for 3D sounds played from this source. - /** This value influences how loud a sound is heard based on its distance. - Changing this value is usually not necessary. Use setDefaultMinDistance() instead. - Don't change this value if you don't know what you are doing: This value causes the sound - to stop attenuating after it reaches the max distance. Most people think that this sets the - volume of the sound to 0 after this distance, but this is not true. Only change the - minimal distance (using for example setDefaultMinDistance()) to influence this. - See ISound::setMaxDistance() for details about what the max distance is. - \return Default maximal distance for 3D sounds from this source. If setDefaultMaxDistance() - was set to a negative value, it will return the default value set in the engine, - using ISoundEngine::setDefault3DSoundMaxDistance(). Default value is -1, causing - the default max distance of the sound engine to take effect. */ - virtual ik_f32 getDefaultMaxDistance() = 0; - - //! Forces the sound to be reloaded at next replay. - /** Sounds which are not played as streams are buffered to make it possible to - replay them without much overhead. If the sound file is altered after the sound - has been played the first time, the engine won't play the changed file then. - Calling this method makes the engine reload the file before the file is played - the next time.*/ - virtual void forceReloadAtNextUse() = 0; - - //! Sets the threshold size where irrKlang decides to force streaming a file independent of the user specified setting. - /** When specifying ESM_NO_STREAMING for playing back a sound file, irrKlang will - ignore this setting if the file is bigger than this threshold and stream the file - anyway. Please note that if an audio format loader is not able to return the - size of a sound source and returns -1 as length, this will be ignored as well - and streaming has to be forced. - \param threshold: New threshold. The value is specified in uncompressed bytes and its default value is - about one Megabyte. Set to 0 or a negative value to disable stream forcing. */ - virtual void setForcedStreamingThreshold(ik_s32 thresholdBytes) = 0; - - //! Returns the threshold size where irrKlang decides to force streaming a file independent of the user specified setting. - /** The value is specified in uncompressed bytes and its default value is - about one Megabyte. See setForcedStreamingThreshold() for details. */ - virtual ik_s32 getForcedStreamingThreshold() = 0; - - //! Returns a pointer to the loaded and decoded sample data. - /** \return Returns a pointer to the sample data. The data is provided in decoded PCM data. The - exact format can be retrieved using getAudioFormat(). Use getAudioFormat().getSampleDataSize() - for getting the amount of bytes. The returned pointer will only be valid as long as the sound - source exists. - This function will only return a pointer to the data if the - audio file is not streamed, namely ESM_NO_STREAMING. Otherwise this function will return 0. - Note: If the sound never has been played before, the sound engine will have to open - the file and decode audio data from there, so this call could take a bit depending - on the type of the file.*/ - virtual void* getSampleData() = 0; - }; - -} // end namespace irrklang - - -#endif diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundStopEventReceiver.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundStopEventReceiver.h deleted file mode 100644 index 511a8b0..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_ISoundStopEventReceiver.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_SOUND_STOP_EVENT_RECEIVER_H_INCLUDED__ -#define __I_IRRKLANG_SOUND_STOP_EVENT_RECEIVER_H_INCLUDED__ - -#include "ik_IRefCounted.h" -#include "ik_SAudioStreamFormat.h" - - -namespace irrklang -{ - - -//! An enumeration listing all reasons for a fired sound stop event -enum E_STOP_EVENT_CAUSE -{ - //! The sound stop event was fired because the sound finished playing - ESEC_SOUND_FINISHED_PLAYING = 0, - - //! The sound stop event was fired because the sound was stopped by the user, calling ISound::stop(). - ESEC_SOUND_STOPPED_BY_USER, - - //! The sound stop event was fired because the source of the sound was removed, for example - //! because irrKlang was shut down or the user called ISoundEngine::removeSoundSource(). - ESEC_SOUND_STOPPED_BY_SOURCE_REMOVAL, - - //! This enumeration literal is never used, it only forces the compiler to - //! compile these enumeration values to 32 bit. - ESEC_FORCE_32_BIT = 0x7fffffff -}; - - -//! Interface to be implemented by the user, which recieves sound stop events. -/** The interface has only one method to be implemented by the user: OnSoundStopped(). -Implement this interface and set it via ISound::setSoundStopEventReceiver(). -The sound stop event is guaranteed to be called when a sound or sound stream is finished, -either because the sound reached its playback end, its sound source was removed, -ISoundEngine::stopAllSounds() has been called or the whole engine was deleted. */ -class ISoundStopEventReceiver -{ -public: - - //! destructor - virtual ~ISoundStopEventReceiver() {}; - - //! Called when a sound has stopped playing. - /** This is the only method to be implemented by the user. - The sound stop event is guaranteed to be called when a sound or sound stream is finished, - either because the sound reached its playback end, its sound source was removed, - ISoundEngine::stopAllSounds() has been called or the whole engine was deleted. - Please note: Sound events will occur in a different thread when the engine runs in - multi threaded mode (default). In single threaded mode, the event will happen while - the user thread is calling ISoundEngine::update(). - \param sound: Sound which has been stopped. - \param reason: The reason why the sound stop event was fired. Usually, this will be ESEC_SOUND_FINISHED_PLAYING. - When the sound was aborded by calling ISound::stop() or ISoundEngine::stopAllSounds();, this would be - ESEC_SOUND_STOPPED_BY_USER. If irrKlang was deleted or the sound source was removed, the value is - ESEC_SOUND_STOPPED_BY_SOURCE_REMOVAL. - \param userData: userData pointer set by the user when registering the interface - via ISound::setSoundStopEventReceiver(). */ - virtual void OnSoundStopped(ISound* sound, E_STOP_EVENT_CAUSE reason, void* userData) = 0; - -}; - - -} // end namespace irrklang - - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IVirtualRefCounted.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IVirtualRefCounted.h deleted file mode 100644 index 86b589f..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_IVirtualRefCounted.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __I_IRRKLANG_VIRTUAL_UNKNOWN_H_INCLUDED__ -#define __I_IRRKLANG_VIRTUAL_UNKNOWN_H_INCLUDED__ - -#include "ik_irrKlangTypes.h" - - -namespace irrklang -{ - - //! Reference counting base class for objects in the Irrlicht Engine similar to IRefCounted. - /** See IRefCounted for the basics of this class. - The difference to IRefCounted is that the class has to implement reference counting - for itself. - */ - class IVirtualRefCounted - { - public: - - //! Destructor. - virtual ~IVirtualRefCounted() - { - } - - //! Grabs the object. Increments the reference counter by one. - /** To be implemented by the derived class. If you don't want to - implement this, use the class IRefCounted instead. See IRefCounted::grab() for details - of this method. */ - virtual void grab() = 0; - - //! Drops the object. Decrements the reference counter by one. - /** To be implemented by the derived class. If you don't want to - implement this, use the class IRefCounted instead. See IRefCounted::grab() for details - of this method. */ - virtual bool drop() = 0; - }; - - - -} // end namespace irrklang - - - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_SAudioStreamFormat.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_SAudioStreamFormat.h deleted file mode 100644 index cc6d343..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_SAudioStreamFormat.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __S_IRRKLANG_AUDIO_STREAM_FORMAT_H_INCLUDED__ -#define __S_IRRKLANG_AUDIO_STREAM_FORMAT_H_INCLUDED__ - -#include "ik_IRefCounted.h" - - -namespace irrklang -{ - - //! audio sample data format enumeration for supported formats - enum ESampleFormat - { - //! one unsigned byte (0;255) - ESF_U8, - - //! 16 bit, signed (-32k;32k) - ESF_S16 - }; - - - //! structure describing an audio stream format with helper functions - struct SAudioStreamFormat - { - //! channels, 1 for mono, 2 for stereo - ik_s32 ChannelCount; - - //! amount of frames in the sample data or stream. - /** If the stream has an unknown lenght, this is -1 */ - ik_s32 FrameCount; - - //! samples per second - ik_s32 SampleRate; - - //! format of the sample data - ESampleFormat SampleFormat; - - //! returns the size of a sample of the data described by the stream data in bytes - inline ik_s32 getSampleSize() const - { - return (SampleFormat == ESF_U8) ? 1 : 2; - } - - //! returns the frame size of the stream data in bytes - inline ik_s32 getFrameSize() const - { - return ChannelCount * getSampleSize(); - } - - //! returns the size of the sample data in bytes - /* Returns an invalid negative value when the stream has an unknown lenght */ - inline ik_s32 getSampleDataSize() const - { - return getFrameSize() * FrameCount; - } - - //! returns amount of bytes per second - inline ik_s32 getBytesPerSecond() const - { - return getFrameSize() * SampleRate; - } - }; - - -} // end namespace irrklang - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_irrKlangTypes.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_irrKlangTypes.h deleted file mode 100644 index e2b1560..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_irrKlangTypes.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __IRRKLANG_TYPES_H_INCLUDED__ -#define __IRRKLANG_TYPES_H_INCLUDED__ - - -namespace irrklang -{ - - //! 8 bit unsigned variable. - /** This is a typedef for unsigned char, it ensures portability of the engine. */ - typedef unsigned char ik_u8; - - //! 8 bit signed variable. - /** This is a typedef for signed char, it ensures portability of the engine. */ - typedef signed char ik_s8; - - //! 8 bit character variable. - /** This is a typedef for char, it ensures portability of the engine. */ - typedef char ik_c8; - - - - //! 16 bit unsigned variable. - /** This is a typedef for unsigned short, it ensures portability of the engine. */ - typedef unsigned short ik_u16; - - //! 16 bit signed variable. - /** This is a typedef for signed short, it ensures portability of the engine. */ - typedef signed short ik_s16; - - - - //! 32 bit unsigned variable. - /** This is a typedef for unsigned int, it ensures portability of the engine. */ - typedef unsigned int ik_u32; - - //! 32 bit signed variable. - /** This is a typedef for signed int, it ensures portability of the engine. */ - typedef signed int ik_s32; - - - - //! 32 bit floating point variable. - /** This is a typedef for float, it ensures portability of the engine. */ - typedef float ik_f32; - - //! 64 bit floating point variable. - /** This is a typedef for double, it ensures portability of the engine. */ - typedef double ik_f64; - - - - // some constants - - const ik_f32 IK_ROUNDING_ERROR_32 = 0.000001f; - const ik_f64 IK_PI64 = 3.1415926535897932384626433832795028841971693993751; - const ik_f32 IK_PI32 = 3.14159265359f; - const ik_f32 IK_RADTODEG = 180.0f / IK_PI32; - const ik_f32 IK_DEGTORAD = IK_PI32 / 180.0f; - const ik_f64 IK_RADTODEG64 = 180.0 / IK_PI64; - const ik_f64 IK_DEGTORAD64 = IK_PI64 / 180.0; - - //! returns if a float equals the other one, taking floating - //! point rounding errors into account - inline bool equalsfloat(const ik_f32 a, const ik_f32 b, const ik_f32 tolerance = IK_ROUNDING_ERROR_32) - { - return (a + tolerance > b) && (a - tolerance < b); - } - -} // end irrklang namespace - -// ensure wchar_t type is existing for unicode support -#include - -// define the wchar_t type if not already built in. -#ifdef _MSC_VER // microsoft compiler - #ifndef _WCHAR_T_DEFINED - //! A 16 bit wide character type. - /** - Defines the wchar_t-type. - In VS6, its not possible to tell - the standard compiler to treat wchar_t as a built-in type, and - sometimes we just don't want to include the huge stdlib.h or wchar.h, - so we'll use this. - */ - typedef unsigned short wchar_t; - #define _WCHAR_T_DEFINED - #endif // wchar is not defined -#endif // microsoft compiler - - -#endif // __IRR_TYPES_H_INCLUDED__ - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_vec3d.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_vec3d.h deleted file mode 100644 index ce56669..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/ik_vec3d.h +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright (C) 2002-2018 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __IRR_IRRKLANG_VEC_3D_H_INCLUDED__ -#define __IRR_IRRKLANG_VEC_3D_H_INCLUDED__ - -#include -#include "ik_irrKlangTypes.h" - - -namespace irrklang -{ - - //! a 3d vector template class for representing vectors and points in 3d - template - class vec3d - { - public: - - vec3d(): X(0), Y(0), Z(0) {}; - vec3d(T nx, T ny, T nz) : X(nx), Y(ny), Z(nz) {}; - vec3d(const vec3d& other) :X(other.X), Y(other.Y), Z(other.Z) {}; - - //! constructor creating an irrklang vec3d from an irrlicht vector. - #ifdef __IRR_POINT_3D_H_INCLUDED__ - template - vec3d(const B& other) :X(other.X), Y(other.Y), Z(other.Z) {}; - #endif // __IRR_POINT_3D_H_INCLUDED__ - - // operators - - vec3d operator-() const { return vec3d(-X, -Y, -Z); } - - vec3d& operator=(const vec3d& other) { X = other.X; Y = other.Y; Z = other.Z; return *this; } - - vec3d operator+(const vec3d& other) const { return vec3d(X + other.X, Y + other.Y, Z + other.Z); } - vec3d& operator+=(const vec3d& other) { X+=other.X; Y+=other.Y; Z+=other.Z; return *this; } - - vec3d operator-(const vec3d& other) const { return vec3d(X - other.X, Y - other.Y, Z - other.Z); } - vec3d& operator-=(const vec3d& other) { X-=other.X; Y-=other.Y; Z-=other.Z; return *this; } - - vec3d operator*(const vec3d& other) const { return vec3d(X * other.X, Y * other.Y, Z * other.Z); } - vec3d& operator*=(const vec3d& other) { X*=other.X; Y*=other.Y; Z*=other.Z; return *this; } - vec3d operator*(const T v) const { return vec3d(X * v, Y * v, Z * v); } - vec3d& operator*=(const T v) { X*=v; Y*=v; Z*=v; return *this; } - - vec3d operator/(const vec3d& other) const { return vec3d(X / other.X, Y / other.Y, Z / other.Z); } - vec3d& operator/=(const vec3d& other) { X/=other.X; Y/=other.Y; Z/=other.Z; return *this; } - vec3d operator/(const T v) const { T i=(T)1.0/v; return vec3d(X * i, Y * i, Z * i); } - vec3d& operator/=(const T v) { T i=(T)1.0/v; X*=i; Y*=i; Z*=i; return *this; } - - bool operator<=(const vec3d&other) const { return X<=other.X && Y<=other.Y && Z<=other.Z;}; - bool operator>=(const vec3d&other) const { return X>=other.X && Y>=other.Y && Z>=other.Z;}; - - bool operator==(const vec3d& other) const { return other.X==X && other.Y==Y && other.Z==Z; } - bool operator!=(const vec3d& other) const { return other.X!=X || other.Y!=Y || other.Z!=Z; } - - // functions - - //! returns if this vector equalsfloat the other one, taking floating point rounding errors into account - bool equals(const vec3d& other) - { - return equalsfloat(X, other.X) && - equalsfloat(Y, other.Y) && - equalsfloat(Z, other.Z); - } - - void set(const T nx, const T ny, const T nz) {X=nx; Y=ny; Z=nz; } - void set(const vec3d& p) { X=p.X; Y=p.Y; Z=p.Z;} - - //! Returns length of the vector. - ik_f64 getLength() const { return sqrt(X*X + Y*Y + Z*Z); } - - //! Returns squared length of the vector. - /** This is useful because it is much faster then - getLength(). */ - ik_f64 getLengthSQ() const { return X*X + Y*Y + Z*Z; } - - //! Returns the dot product with another vector. - T dotProduct(const vec3d& other) const - { - return X*other.X + Y*other.Y + Z*other.Z; - } - - //! Returns distance from an other point. - /** Here, the vector is interpreted as point in 3 dimensional space. */ - ik_f64 getDistanceFrom(const vec3d& other) const - { - ik_f64 vx = X - other.X; ik_f64 vy = Y - other.Y; ik_f64 vz = Z - other.Z; - return sqrt(vx*vx + vy*vy + vz*vz); - } - - //! Returns squared distance from an other point. - /** Here, the vector is interpreted as point in 3 dimensional space. */ - ik_f32 getDistanceFromSQ(const vec3d& other) const - { - ik_f32 vx = X - other.X; ik_f32 vy = Y - other.Y; ik_f32 vz = Z - other.Z; - return (vx*vx + vy*vy + vz*vz); - } - - //! Calculates the cross product with another vector - vec3d crossProduct(const vec3d& p) const - { - return vec3d(Y * p.Z - Z * p.Y, Z * p.X - X * p.Z, X * p.Y - Y * p.X); - } - - //! Returns if this vector interpreted as a point is on a line between two other points. - /** It is assumed that the point is on the line. */ - bool isBetweenPoints(const vec3d& begin, const vec3d& end) const - { - ik_f32 f = (ik_f32)(end - begin).getLengthSQ(); - return (ik_f32)getDistanceFromSQ(begin) < f && - (ik_f32)getDistanceFromSQ(end) < f; - } - - //! Normalizes the vector. - vec3d& normalize() - { - T l = (T)getLength(); - if (l == 0) - return *this; - - l = (T)1.0 / l; - X *= l; - Y *= l; - Z *= l; - return *this; - } - - //! Sets the lenght of the vector to a new value - void setLength(T newlength) - { - normalize(); - *this *= newlength; - } - - //! Inverts the vector. - void invert() - { - X *= -1.0f; - Y *= -1.0f; - Z *= -1.0f; - } - - //! Rotates the vector by a specified number of degrees around the Y - //! axis and the specified center. - //! \param degrees: Number of degrees to rotate around the Y axis. - //! \param center: The center of the rotation. - void rotateXZBy(ik_f64 degrees, const vec3d& center) - { - degrees *= IK_DEGTORAD64; - T cs = (T)cos(degrees); - T sn = (T)sin(degrees); - X -= center.X; - Z -= center.Z; - set(X*cs - Z*sn, Y, X*sn + Z*cs); - X += center.X; - Z += center.Z; - } - - //! Rotates the vector by a specified number of degrees around the Z - //! axis and the specified center. - //! \param degrees: Number of degrees to rotate around the Z axis. - //! \param center: The center of the rotation. - void rotateXYBy(ik_f64 degrees, const vec3d& center) - { - degrees *= IK_DEGTORAD64; - T cs = (T)cos(degrees); - T sn = (T)sin(degrees); - X -= center.X; - Y -= center.Y; - set(X*cs - Y*sn, X*sn + Y*cs, Z); - X += center.X; - Y += center.Y; - } - - //! Rotates the vector by a specified number of degrees around the X - //! axis and the specified center. - //! \param degrees: Number of degrees to rotate around the X axis. - //! \param center: The center of the rotation. - void rotateYZBy(ik_f64 degrees, const vec3d& center) - { - degrees *= IK_DEGTORAD64; - T cs = (T)cos(degrees); - T sn = (T)sin(degrees); - Z -= center.Z; - Y -= center.Y; - set(X, Y*cs - Z*sn, Y*sn + Z*cs); - Z += center.Z; - Y += center.Y; - } - - //! Returns interpolated vector. - /** \param other: other vector to interpolate between - \param d: value between 0.0f and 1.0f. */ - vec3d getInterpolated(const vec3d& other, ik_f32 d) const - { - ik_f32 inv = 1.0f - d; - return vec3d(other.X*inv + X*d, - other.Y*inv + Y*d, - other.Z*inv + Z*d); - } - - //! Gets the Y and Z rotations of a vector. - /** Thanks to Arras on the Irrlicht forums to add this method. - \return A vector representing the rotation in degrees of - this vector. The Z component of the vector will always be 0. */ - vec3d getHorizontalAngle() - { - vec3d angle; - - angle.Y = (T)atan2(X, Z); - angle.Y *= (ik_f32)IK_RADTODEG; - - if (angle.Y < 0.0f) angle.Y += 360.0f; - if (angle.Y >= 360.0f) angle.Y -= 360.0f; - - ik_f32 z1 = (T)sqrt(X*X + Z*Z); - - angle.X = (T)atan2(z1, Y); - angle.X *= (ik_f32)IK_RADTODEG; - angle.X -= 90.0f; - - if (angle.X < 0.0f) angle.X += 360.0f; - if (angle.X >= 360) angle.X -= 360.0f; - - return angle; - } - - //! Fills an array of 4 values with the vector data (usually floats). - /** Useful for setting in shader constants for example. The fourth value - will always be 0. */ - void getAs4Values(T* array) - { - array[0] = X; - array[1] = Y; - array[2] = Z; - array[3] = 0; - } - - - // member variables - - T X, Y, Z; - }; - - - //! Typedef for a ik_f32 3d vector, a vector using floats for X, Y and Z - typedef vec3d vec3df; - - //! Typedef for an integer 3d vector, a vector using ints for X, Y and Z - typedef vec3d vec3di; - - template vec3d operator*(const S scalar, const vec3d& vector) { return vector*scalar; } - -} // end namespace irrklang - - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/include/irrKlang.h b/BAKKA Editor/irrKlang-64bit-1.6.0/include/irrKlang.h deleted file mode 100644 index 33f9ea0..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/include/irrKlang.h +++ /dev/null @@ -1,1040 +0,0 @@ -/* irrKlang.h -- interface of the 'irrKlang' library - - Copyright (C) 2002-2018 Nikolaus Gebhardt - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. -*/ - -#ifndef __IRR_KLANG_H_INCLUDED__ -#define __IRR_KLANG_H_INCLUDED__ - -#include "ik_irrKlangTypes.h" -#include "ik_vec3d.h" - -#include "ik_IRefCounted.h" -#include "ik_IVirtualRefCounted.h" - -#include "ik_ESoundOutputDrivers.h" -#include "ik_ESoundEngineOptions.h" -#include "ik_EStreamModes.h" -#include "ik_SAudioStreamFormat.h" -#include "ik_ISoundEngine.h" -#include "ik_ISoundSource.h" -#include "ik_ISound.h" -#include "ik_IAudioStream.h" -#include "ik_IAudioStreamLoader.h" -#include "ik_ISoundEffectControl.h" -#include "ik_ISoundStopEventReceiver.h" -#include "ik_IFileFactory.h" -#include "ik_IFileReader.h" -#include "ik_ISoundDeviceList.h" -#include "ik_IAudioRecorder.h" -#include "ik_ISoundMixedOutputReceiver.h" - -//! irrKlang Version -#define IRR_KLANG_VERSION "1.6.0" - -/*! \mainpage irrKlang 1.6.0 API documentation - * - *
- - * \section contents Contents - * General:
- * @ref intro
- * @ref features
- * @ref links
- * @ref tipsandtricks
- *
- * Programming irrKlang:
- * @ref concept
- * @ref playingSounds
- * @ref changingSounds
- * @ref soundSources
- * @ref sound3d
- * @ref removingSounds
- * @ref events
- * @ref memoryPlayback
- * @ref effects
- * @ref fileOverriding
- * @ref audioDecoders
- * @ref plugins
- * @ref staticLib
- * @ref enumeratingDevices
- * @ref recordingAudio
- * @ref unicode
- *
- * Short full examples:
- * @ref quickstartexample
- * @ref quickstartexample2
- *
- *
- * - * \section intro Introduction - * - * Welcome to the irrKlang API documentation. This page should give you a short overview - * over irrKlang, the high level audio library. - * In this documentation files you'll find any information you'll need to develop applications with - * irrKlang using C++. If you are looking for a tutorial on how to start, you'll - * find some on the homepage of irrKlang at - * http://www.ambiera.com/irrklang - * or inside the SDK in the directory \examples. - * - * The irrKlang library is intended to be an easy-to-use 3d and 2d sound engine, so - * this documentation is an important part of it. If you have any questions or - * suggestions, please take a look into the ambiera.com forum or just send a mail. - * - *
- *
- * - * - * \section features Features of irrKlang - * - * irrKlang is a high level 2D and 3D - * cross platform sound engine and audio library. - * It has a very simply object orientated interface and was designed to be used - * in games, scientific simulations, architectural visualizations and similar. - * irrKlang plays several file formats such as - *
    - *
  • RIFF WAVE (*.wav)
  • - *
  • Ogg Vorbis (*.ogg)
  • - *
  • MPEG-1 Audio Layer 3 (*.mp3)
  • - *
  • Free Lossless Audio Codec (*.flac)
  • - *
  • Amiga Modules (*.mod)
  • - *
  • Impulse Tracker (*.it)
  • - *
  • Scream Tracker 3 (*.s3d)
  • - *
  • Fast Tracker 2 (*.xm)
  • - *
- * It is also able to run on different operating systems and use several output drivers: - *
    - *
  • Windows 98, ME, NT 4, 2000, XP, Vista, Windows 7, Windows 8
  • - *
      - *
    • DirectSound
    • - *
    • DirectSound8
    • - *
    • WinMM
    • - *
    - *
  • Linux / *nix
  • - *
      - *
    • ALSA
    • - *
    - *
  • MacOSX (x86 and PPC)
  • - *
      - *
    • CoreAudio
    • - *
    - *
- *
- *
- *
- * - * - * - * \section links Links into the API documentation - * - * irrklang::ISoundEngine: The main class of irrKlang.
- * Class list: List of all classes with descriptions.
- * Class members: Good place to find forgotten features.
- *
- *
- *
- * - * - * - * \section tipsandtricks Tips and Tricks - * - * This section lists a few tips you might consider when implementing the sound part of your application - * using irrKlang: - * - *
    - *
  • If you can choose which audio file format is the primary one for your application, - * use .OGG files, instead of for example .MP3 files. irrKlang uses a lot less memory - * and CPU power when playing .OGGs.
  • - *
  • To keep your application simple, each time you play a sound, you can use for example - * play2D("filename.mp3") and let irrKlang handle the rest. There is no need to implement - * a preloading/caching/file management system for the audio playback. irrKlang will handle - * all this by itself and will never load a file twice.
  • - *
  • irrKlang is crashing in your application? This should not happen, irrKlang is pretty stable, - * and in most cases, this is a problem in your code: In a lot of cases the reason is simply - * a wrong call to irrklang::IRefCounted::drop(). Be sure you are doing it correctly. (If you are unsure, - * tempoarily remove all calls to irrklang::IRefCounted::drop() and see if this helps.)
  • - *
- * - *
- *
- *
- *
- * - * - * - * \section concept Starting up the Engine - * - * irrKlang is designed so that it is very easy to achieve everything, its interface should - * be very simple to use. The @ref quickstartexample shows how to play and mp3 file, and there - * is another example, @ref quickstartexample2, showing some few more details.
- * To start up the sound engine, you simply need to call createIrrKlangDevice(). To shut it down, - * call IRefCounted::drop(): - * - * \code - * #include - * - * // ... - * - * // start up the engine - * irrklang::ISoundEngine* engine = irrklang::createIrrKlangDevice(); - * - * // ... - * - * // after finished, - * // close the engine again, similar as calling 'delete' - * engine->drop(); - * \endcode - * - * The createIrrKlangDevice() function also accepts several parameters, so that you can - * specify which sound driver should be used, if plugins should be used, if irrKlang - * should run in multithreaded mode, and similar. - *
- *
- *
- *
- * - * - * - * \section playingSounds Playing Sounds - * - * Once you have irrKlang running (like in @ref concept), you can start playing sounds: - * - * \code - * engine->play2D("someSoundFile.wav"); - * \endcode - * - * This works with all supported file types. You can replace "someSoundFile.wav" with - * "someSoundFile.mp3", or "someSoundFile.ogg", for example.
- * To play a sound looped, set the second parameter to 'true': - * - * \code - * engine->play2D("myMusic.mp3", true); - * \endcode - * - * To stop this looping sound again, use engine->\link irrklang::ISoundEngine::stopAllSounds stopAllSounds()\endlink to stop all sounds, or - * irrklang::ISound::stop() if you only want to stop that single sound. @ref changingSounds - * shows how to get to that ISound interface. - *
- *
- *
- *
- * - * - * \section changingSounds Influencing Sounds during Playback - * To influence parameters of the sound such as pan, volume or playback speed during runtime, - * to get the play position or stop playback of single playing sounds, - * you can use the irrklang::ISound interface. - * irrklang::ISoundEngine::play2D (but also play3D) returns - * a pointer to this interface when its third ('startPaused') or fourth ('track') parameter - * was set to true: - * - * \code - * irrklang::ISound* snd = engine->play2D("myMusic.mp3", true, false, true); - * - * // ... - * - * if (snd) - * snd->setVolume(someNewValue); - * - * // ... - * - * if (snd) - * { - * snd->drop(); // don't forget to release the pointer once it is no longer needed by you - * snd = 0; - * } - * \endcode - * - * The irrklang::ISound interface can also be used to test if the sound has been finished, - * set event receivers, pause and unpause sounds and similar. - *
- *
- *
- *
- * - * - * \section soundSources Using Sound Sources - * - * To be more flexible playing back sounds, irrKlang uses the concept of sound sources. - * A sound source can be simply the name of a sound file, such as "sound.wav". It is possible - * to add "sound.wav" as sound source to irrKlang, and play it using the sound source pointer: - * - * \code - * irrklang::ISoundSource* shootSound = engine->addSoundSourceFromFile("shoot.wav"); - * - * engine->play2D(shootSound); - * - * // note: you don't need to drop() the shootSound if you don't use it anymore - * \endcode - * - * The advantage of using irrklang::ISoundSource is that it is possible to set - * default values for this source, such - * as volume or distances if it should be used as 3D sound: - * - * \code - * irrklang::ISoundSource* shootSound = engine->addSoundSourceFromFile("shoot.wav"); - * - * shootSound->setDefaultVolume(0.5f); - * - * // shootSound will now be played with half its sound volume by default: - * engine->play2D(shootSound); - * \endcode - * - * It is also possible to have multiple settings for the same sound file: - * - * \code - * irrklang::ISoundSource* shootSound = engine->addSoundSourceFromFile("shoot.wav"); - * irrklang::ISoundSource* shootSound2 = engine->addSoundSourceAlias(shootSound, "silentShoot"); - * - * shootSound2->setDefaultVolume(0.1f); - * - * // shootSound will now be played with 100% of its sound volume by default, - * // shootSound2 will now be played 10% of its sound volume by default. It is - * // also possible to play it using engine->play("silentShoot"), now. - * \endcode - * - * Using addSoundSourceFromMemory(), it is also possible to play sounds back directly from memory, - * without files. - * Of course, it is not necessary to use sound sources. Using irrklang::ISound, it is - * possible to change the settings of all sounds, too. But using sound sources, it is - * not necessary to do this every time a sound is played. - *
- *
- *
- *
- * - * - * - * \section sound3d 3D Sound - * - * There is nothing difficult in playing sounds in 3D using irrKlang: Instead of using - * irrklang::ISoundEngine::play2D(), just use irrklang::ISoundEngine::play3D(), which - * takes a 3D position as additional parameter: - * - * \code - * irrklang::vec3df position(23,70,90); - * engine->play3D("yourSound.wav", position); - * \endcode - * - * But to make it sound realistic, you need to set a minimal sound - * distance: If your sound is caused by a bee, it will usually have a smaller - * sound radius than for example a jet engine. You can set default values using sound sources - * (see @ref soundSources) or set these values after you have started the sound paused: - * - * \code - * irrklang::vec3df position(23,70,90); - * - * // start the sound paused: - * irrklang::ISound* snd = engine->play3D("yourSound.wav", position, false, true); - * - * if (snd) - * { - * snd->setMinDistance(30.0f); // a loud sound - * snd->setIsPaused(false); // unpause the sound - * } - * \endcode - * - * There is also the possibility to change the maxDistance, but it is only necessary to change this - * in very rare cicumstances. - * If the sound moves, it is also a good idea to update its position from time to time: - * - * \code - * if (snd) - * snd->setPosition(newPosition); - * \endcode - * - * And don't forget to drop() the sound after you don't need it anymore. If you do, it's - * nothing severe because irrKlang will still clean up the sounds resources after it has - * finished, but you still would waste some few bytes of memory: - * - * \code - * if (snd) - * { - * snd->drop(); - * snd = 0; - * } - * \endcode - * - * To update the position of yourself, the listener of the 3D sounds, use this from - * time to time: - * - * \code - * irrklang::vec3df position(0,0,0); // position of the listener - * irrklang::vec3df lookDirection(10,0,10); // the direction the listener looks into - * irrklang::vec3df velPerSecond(0,0,0); // only relevant for doppler effects - * irrklang::vec3df upVector(0,1,0); // where 'up' is in your 3D scene - * - * engine->setListenerPosition(position, lookDirection, velPerSecond, upVector); - * \endcode - * - *
- *
- *
- *
- * - * - * \section removingSounds Removing Sounds - * - * irrKlang manages the memory usage of sounds by itself, so usually, you don't have - * to care about memory management. But if you know you need to reduce the - * amount of used memory at a certain point in your program, you can do this: - * - * \code - * engine->removeAllSoundSources(); - * \endcode - * - * This will remove all sounds and also cause all sounds to be stopped. To remove single - * sounds from the engine, use: - * - * \code - * engine->removeSoundSource(pointerToSomeSoundSource); - * // or: - * engine->removeSoundSource("nameOfASoundFile.wav"); - * \endcode - * - * Note: Only removing buffered sounds will reduce the amount of memory used by irrKlang, streamed - * sounds don't occupy a lot of memory when they are not played. - *
- *
- *
- *
- * - * - * - * \section events Using Sound Events - * - * In order to wait for a sound to be finished, it is simply possible to - * poll irrklang::ISound::isFinished(). Another way would be to constantly use - * irrklang::ISoundEngine::isCurrentlyPlaying to test wether a sound with that name or source - * is currently playing. But of course, an event based approach is a lot nicer. That's why irrKlang - * supports sound events.
- * The key to sound events is the method - * \link irrklang::ISound::setSoundStopEventReceiver setSoundStopEventReceiver \endlink - * of the irrklang::ISound interface - * (See @ref changingSounds on how to get the ISound interface): - * - * \code - * irrklang::ISound* snd = engine->play2D("speech.mp3", false, false, true); - * if (snd) - * snd->setSoundStopEventReceiver(yourEventReceiver, 0); - * \endcode - * - * The optional second parameter of setSoundStopEventReceiver is a user pointer, set it to whatever you like. - * 'yourEventReceiver' must be an implementation of the irrklang::ISoundStopEventReceiver interface.
- * A whole implementation could look like this: - * - * \code - * class MySoundEndReceiver : public irrklang::ISoundStopEventReceiver - * { - * public: - * virtual void OnSoundStopped (irrklang::ISound* sound, irrklang::E_STOP_EVENT_CAUSE reason, void* userData) - * { - * // called when the sound has ended playing - * printf("sound has ended"); - * } - * } - * - * // ... - * - * MySoundEndReceiver* myReceiver = new MySoundEndReceiver(); - * irrklang::ISound* snd = engine->play2D("speech.mp3", false, false, true); - * if (snd) - * snd->setSoundStopEventReceiver(myReceiver); - * - * myReceiver->drop(); // similar to delete - * \endcode - * - * The irrklang::ISoundStopEventReceiver::OnSoundStopped() method is guaranteed to be called when a sound or sound stream has stopped, - * either because the sound reached its playback end, its sound source was removed, - * ISoundEngine::stopAllSounds() has been called or the whole engine was deleted. - *
- *
- *
- *
- * - * - * - * \section memoryPlayback Memory Playback - * - * Using irrKlang, it is easily possible to play sounds directly from memory instead out of - * files. There is an example project showing this: In the SDK, in /examples/03.MemoryPlayback. - * But in short, it simply works by adding the memory as sound source (See @ref soundSources for - * details about sound sources): - * - * \code - * engine->addSoundSourceFromMemory(pointerToMemory, memorySize, "nameforthesound.wav"); - * - * // play sound now - * engine->play2D("nameforthesound.wav"); - * \endcode - * - * Or using a sound source pointer: - * - * \code - * irrklang::ISoundSource* snd = - * engine->addSoundSourceFromMemory(pointerToMemory, memorySize, "nameforthesound.wav"); - * - * // play sound now - * engine->play2D(snd); - * \endcode - * - * Note: It is also possible to overwrite the file access directly, don't use this Memory Playback - * feature for this. See @ref fileOverriding for details. - *
- *
- *
- *
- * - * - * - * \section effects Sound Effects - * - * irrKlang supports the effects Chorus, Compressor, Distortion, Echo, Flanger - * Gargle, 3DL2Reverb, ParamEq and WavesReverb, when using the sound driver - * irrklang::ESOD_DIRECT_SOUND_8, which selected by default when using Windows.
- * - * Using the irrklang::ISound interface, you can optain the irrklang::ISoundEffectControl - * interface if the sound device supports sound effects and the last parameter ('enableSoundEffects') - * was set to true when calling play2D(): - * - * \code - * irrklang::ISound* snd = engine->play2D("sound.wav", true, false, true, ESM_AUTO_DETECT, true); - * - * if (snd) - * { - * irrklang::ISoundEffectControl* fx = snd->getSoundEffectControl(); - * if (fx) - * { - * // enable the echo sound effect for this sound - * fx->enableEchoSoundEffect(); - * } - * } - * - * snd->drop(); - * \endcode - * - * This enabled the echo sound effect for this sound. The method also supports a lot of - * parameters, and can be called multiple times to change those parameters over time if wished. - * There are a lot of other sound effects, see irrklang::ISoundEffectControl for details. - *
- *
- *
- *
- * - * - * - * \section fileOverriding Overriding File Access - * - * It is possible to let irrKlang use your own file access functions. - * This is useful if you want to read sounds from other sources than - * just files, for example from custom internet streams or - * an own encypted archive format. There is an example in the SDK in - * examples/04.OverrideFileAccess which shows this as well.
- * - * The only thing to do for this is to implement your own irrklang::IFileFactory, - * and set it in irrKlang using irrklang::ISoundEngine::addFileFactory(): - * - * \code - * // a class implementing the IFileFactory interface to override irrklang file access - * class CMyFileFactory : public irrklang::IFileFactory - * { - * public: - * - * // Opens a file for read access. Simply return 0 if file not found. - * virtual irrklang::IFileReader* createFileReader(const ik_c8* filename) - * { - * // return your own irrklang::IFileReader implementation here, for example like that: - * return new CMyReadFile(filename); - * } - * }; - * - * // ... - * - * CMyFileFactory* myFactory = new CMyFileFactory(); - * engine->addFileFactory(myFactory); - * myFactory->drop(); - * \endcode - * - * For a full example implementation, just take a look into the SDK in examples/04.OverrideFileAccess. - *
- *
- *
- *
- * - * - * - * \section audioDecoders Adding Audio Decoders - * - * To add support for new file formats, it is possible to add new audio decoders - * to irrKlang. - * The only thing to do for this is to implement your own irrklang::IAudioStreamLoader, - * and irrklang::IAudioStream, and set it in irrKlang using - * irrklang::ISoundEngine::registerAudioStreamLoader(): - * - * \code - * class NewAudioStreamLoader : public irrklang::IAudioStreamLoader - * { - * // ... returns NewAudioDecoder and the used file name suffices. - * }; - * - * class NewAudioDecoder : public irrklang::IAudioStream - * { - * public: - * // ... decodes the new file format - * }; - * - * // ... - * - * NewAudioDecoder* loader = new NewAudioDecoder(); - * engine->registerAudioStreamLoader(loader); - * loader->drop(); - * \endcode - * - * There is an example audio decoder and loader with full source in plugins/ikpMP3, which - * adds MP3 audio decoding capabilities to irrKlang. - *
- *
- *
- *
- * - * - * - * \section plugins Creating irrKlang Plugins - * - * irrKlang plugins are ikp*.dll (Windows), ikp*.so (Unix) or ikp*.dylib (MacOS) - * files which are loaded by irrKlang at startup when the - * irrklang::ESEO_LOAD_PLUGINS was set (which is default) or - * irrklang::ISoundEngine::loadPlugins() was called.
- * - * The plugin only needs to contain the following function which will be called by irrKlang: - * - * \code - * #ifdef WIN32 - * // Windows version - * __declspec(dllexport) void __stdcall irrKlangPluginInit(ISoundEngine* engine, const char* version) - * #else - * // Linux and Mac OS version - * void irrKlangPluginInit(ISoundEngine* engine, const char* version) - * #endif - * { - * // your implementation here - * } - * \endcode - * - * In there, it is for example possible to extend irrKlang with new audio decoders, - * see @ref audioDecoders for details.
- * - * There is an example plugin with full source in plugins/ikpMP3, which - * adds MP3 audio decoding capabilities to irrKlang. - *
- *
- *
- *
- * - * - * - * \section staticLib Using irrKlang as static Lib - * - * If you don't want to use the irrKlang.DLL file and link irrKlang statically, you can do this - * by simply linking to the irrKlang.lib in the bin/win32-visualstudio_lib folder. This folder - * will only available in the pro versions of irrKlang, which you get when purchasing an irrKlang - * license. - * - * To use irrKlang in this way, just define IRRKLANG_STATIC before including irrklang.h, like this: - * - * \code - * #define IRRKLANG_STATIC - * #include - * \endcode - * - * Of course, IRRKLANG_STATIC can also simply be defined in the project/compiler settings instead of - * in the source file. - *
- *
- *
- *
- * - * - * - * \section enumeratingDevices Enumerating sound devices - * - * irrKlang uses the default sound device when playing sound when started without parameters. But if you want - * irrKlang to playback sound on one specific sound device, you may want to enumerate the available - * sound devices on your system and select one of them. Use irrklang::createSoundDeviceList() for this. - * This example code shows how to print a list of all available sound devices on the current system and lets - * the user choose one of them: - * - * \code - * int main(int argc, const char** argv) - * { - * // enumerate devices - * - * irrklang::ISoundDeviceList* deviceList = createSoundDeviceList(); - * - * // ask user for a sound device - * - * printf("Devices available:\n\n"); - * - * for (int i=0; igetDeviceCount(); ++i) - * printf("%d: %s\n", i, deviceList->getDeviceDescription(i)); - * - * printf("\nselect a device using the number (or press any key to use default):\n\n"); - * int deviceNumber = getch() - '0'; - * - * // create device with the selected driver - * - * const char* deviceID = deviceList->getDeviceID(deviceNumber); - * - * ISoundEngine* engine = createIrrKlangDevice(irrklang::ESOD_AUTO_DETECT, - * irrklang::ESEO_DEFAULT_OPTIONS, - * deviceID); - * - * deviceList->drop(); // delete device list - * - * // ... use engine now - * } - * \endcode - * - * In this way, it is also possible to play back sound using two devices at the same time: Simply - * create two irrKlang devices with each a different deviceID.
- * Note: createSoundDeviceList() takes a driver type parameter (such as irrklang::ESOD_DIRECT_SOUND8), which you - * have to set to the same value as the first parameter you want to use with createIrrKlangDevice(), if it is - * other than irrklang::ESOD_AUTO_DETECT. - *
- *
- *
- *
- * - * - * - * \section recordingAudio Recording Audio - * - * irrKlang is able to record audio from sound capturing devices such as microphones (currently only - * supported in windows). Use the irrklang::IAudioRecorder interface to do this. The following example shows how - * to record some audio and play it back again using the engine: - * - * \code - * int main(int argc, const char** argv) - * { - * irrklang::ISoundEngine* engine = irrklang::createIrrKlangDevice(); - * irrklang::IAudioRecorder* recorder = irrklang::createIrrKlangAudioRecorder(engine); - * - * if (!engine || !recorder) - * { - * printf("Could not create audio engine or audio recoder\n"); - * return 1; - * } - * - * printf("\nPress any key to start recording audio...\n"); - * getch(); - * - * // record some audio - * - * recorder->startRecordingBufferedAudio(); - * - * printf("\nRECORDING. Press any key to stop...\n"); - * getch(); - * - * recorder->stopRecordingAudio(); - * - * printf("\nRecording done, recorded %dms of audio.\n", - * recorder->getAudioFormat().FrameCount * 1000 / recorder->getAudioFormat().SampleRate ); - * printf("Press any key to play back recorded audio...\n"); - * getch(); - * - * // play the recorded audio - * recorder->addSoundSourceFromRecordedAudio("myRecordedVoice"); - * engine->play2D("myRecordedVoice", true); - * - * // wait until user presses a key - * printf("\nPress any key to quit..."); - * getch(); - * - * recorder->drop(); - * engine->drop(); // delete engine - * - * return 0; - * } - * \endcode - * - * In order to select a specific audio capturing device for recording, it is necessary to enumerate - * the available devices. Simply replace the first to lines of code of the example above with code - * like this to list all devices and select one: - * - * \code - * // enumerate recording devices and ask user to select one - * - * irrklang::ISoundDeviceList* deviceList = irrklang::createAudioRecorderDeviceList(); - * - * printf("Devices available:\n\n"); - * - * for (int i=0; igetDeviceCount(); ++i) - * printf("%d: %s\n", i, deviceList->getDeviceDescription(i)); - * - * printf("\nselect a device using the number (or press any key to use default):\n\n"); - * int deviceNumber = getch() - '0'; - * - * // create recording device with the selected driver - * - * const char* deviceID = deviceList->getDeviceID(deviceNumber); - * irrklang::ISoundEngine* engine = irrklang::createIrrKlangDevice(); - * irrklang::IAudioRecorder* recorder = - * irrklang::createIrrKlangAudioRecorder(engine, irrklang::ESOD_AUTO_DETECT, deviceID); - * - * \endcode - * - *
- *
- *
- *
- * - * - * \section unicode Unicode support - * - * irrKlang supports unicode on all operating systems. Internally, it uses UTF8, and all functions accepting strings - * and file names take UTF8 strings. If you are running irrKlang on Windows, and are using the UNICODE define or using - * wchar_t* strings directly, you can do this as well. Use the irrKlang provided function makeUTF8fromUTF16string() to - * convert your wchar_t* string to a char* string. - * - * This example shows how: - * - * \code - * const wchar_t* yourFilename = L"SomeUnicodeFilename.wav"; // assuming this is the file name you get from some of your functions - * - * const int nBufferSize = 2048; // large enough, but best would be wcslen(yourFilename)*3. - * char strBuffer[nBufferSize]; - * irrklang::makeUTF8fromUTF16string(yourFilename, strBuffer, nBufferSize); - * - * // now the converted file name is in strBuffer. We can play it for example now: - * engine->play2D(strBuffer); - * \endcode - * - * Of course, you can use any other unicode converion function for this. makeUTF8fromUTF16string() is only provided - * for convenience. - *
- *
- *
- *
- * - * - * - * - * - * \section quickstartexample Quick Start Example - * - * To simply start the engine and play a mp3 file, use code like this: - * - * \code - * #include - * #include - * #pragma comment(lib, "irrKlang.lib") // link with irrKlang.dll - * - * int main(int argc, const char** argv) - * { - * irrklang::ISoundEngine* engine = irrklang::createIrrKlangDevice(); - * if (!engine) return 1; // could not start engine - * - * engine->play2D("someMusic.mp3", true); // play some mp3 file, looped - * - * std::cin.get(); // wait until user presses a key - * - * engine->drop(); // delete engine - * return 0; - * } - * \endcode - * - * A mp3 file is being played until the user presses enter in this example. - * As you can see, irrKlang uses namespaces, all of - * the classes are located in the namespace irrklang. If you don't want to write - * this in front of every class and function you are using, simply write - * - * \code - * using namespace irrklang; - * \endcode - * in front of your code, as also shown in the next example. - *
- *
- *
- *
- * - * - * - * \section quickstartexample2 Quick Start Example 2 - * - * The following is a simple interactive application, starting up the sound engine and - * playing some streaming .ogg music file and a .wav sound effect every time the user - * presses a key. - * - * \code - * #include - * #include - * using namespace irrklang; - * - * #pragma comment(lib, "irrKlang.lib") // link with irrKlang.dll - * - * - * int main(int argc, const char** argv) - * { - * // start the sound engine with default parameters - * ISoundEngine* engine = createIrrKlangDevice(); - * - * if (!engine) - * return 0; // error starting up the engine - * - * // play some sound stream, looped - * engine->play2D("../../media/helltroopers.ogg", true); - * - * std::cout << "\nHello World!\n"; - * - * char i = 0; - * - * while(i != 'q') - * { - * std::cout << "Press any key to play some sound, press 'q' to quit.\n"; - * - * // play a single sound - * engine->play2D("../../media/bell.wav"); - * - * std::cin >> i; // wait for user to press some key - * } - * - * engine->drop(); // delete engine - * return 0; - * } - * - * \endcode - */ - -#if defined(IRRKLANG_STATIC) - #define IRRKLANG_API -#else - #if (defined(WIN32) || defined(WIN64) || defined(_MSC_VER)) - #ifdef IRRKLANG_EXPORTS - #define IRRKLANG_API __declspec(dllexport) - #else - #define IRRKLANG_API __declspec(dllimport) - #endif // IRRKLANG_EXPORT - #else - #define IRRKLANG_API __attribute__((visibility("default"))) - #endif // defined(WIN32) || defined(WIN64) -#endif // IRRKLANG_STATIC - -#if defined(_STDCALL_SUPPORTED) -#define IRRKLANGCALLCONV __stdcall // Declare the calling convention. -#else -#define IRRKLANGCALLCONV -#endif // STDCALL_SUPPORTED - -//! Everything in the irrKlang Sound Engine can be found in this namespace. -namespace irrklang -{ - //! Creates an irrKlang device. The irrKlang device is the root object for using the sound engine. - /** \param driver The sound output driver to be used for sound output. Use irrklang::ESOD_AUTO_DETECT - to let irrKlang decide which driver will be best. - \param options A combination of irrklang::E_SOUND_ENGINE_OPTIONS literals. Default value is - irrklang::ESEO_DEFAULT_OPTIONS. - \param deviceID Some additional optional deviceID for the audio driver. If not needed, simple - set this to 0. - This can be used for example to set a specific ALSA output pcm device for output - ("default" or "hw", for example). For most driver types, available deviceIDs can be - enumerated using createSoundDeviceList(). - See @ref enumeratingDevices for an example or ISoundDeviceList or details. - \param sdk_version_do_not_use Don't use or change this parameter. Always set it to - IRRKLANG_SDK_VERSION, which is done by default. This is needed for sdk version checks. - \return Returns pointer to the created irrKlang device or null if the - device could not be created. If you don't need the device, use ISoundEngine::drop() to - delete it. See IRefCounted::drop() for details. - */ - IRRKLANG_API ISoundEngine* IRRKLANGCALLCONV createIrrKlangDevice( - E_SOUND_OUTPUT_DRIVER driver = ESOD_AUTO_DETECT, - int options = ESEO_DEFAULT_OPTIONS, - const char* deviceID = 0, - const char* sdk_version_do_not_use = IRR_KLANG_VERSION); - - - //! Creates a list of available sound devices for the driver type. - /** The device IDs in this list can be used as parameter to createIrrKlangDevice() to - make irrKlang use a special sound device. See @ref enumeratingDevices for an example on how - to use this. - \param driver The sound output driver of which the list is generated. Set it irrklang::ESOD_AUTO_DETECT - to let this function use the same device as createIrrKlangDevice() would choose. - \param sdk_version_do_not_use Don't use or change this parameter. Always set it to - IRRKLANG_SDK_VERSION, which is done by default. This is needed for sdk version checks. - \return Returns a pointer to the list of enumerated sound devices for the selected sound driver. - The device IDs in this list can be used as parameter to createIrrKlangDevice() to - make irrKlang use a special sound device. - After you don't need the list anymore, call ISoundDeviceList::drop() in order to free its memory. */ - IRRKLANG_API ISoundDeviceList* IRRKLANGCALLCONV createSoundDeviceList( - E_SOUND_OUTPUT_DRIVER driver = ESOD_AUTO_DETECT, - const char* sdk_version_do_not_use = IRR_KLANG_VERSION); - - - //! Creates an irrKlang audio recording device. The IAudioRecorder is the root object for recording audio. - /** If you want to play back recorded audio as well, create the ISoundEngine first using - createIrrKlangDevice() and then the IAudioRecorder using createIrrKlangAudioRecorder(), where - you set the ISoundEngine as first parameter. See @ref recordingAudio for an example on how to use this. - Note: audio recording is a very new feature a still beta in irrKlang. It currently only works in Windows - and with DirectSound (subject to change). - \param irrKlangDeviceForPlayback A pointer to the already existing sound device used for playback - of audio. Sound sources recorded with the IAudioRecorder will be added into that device so that - they can be played back there. - \param driver The sound output driver to be used for recording audio. Use irrklang::ESOD_AUTO_DETECT - to let irrKlang decide which driver will be best. - \param deviceID Some additional optional deviceID for the audio driver. If not needed, simple - set this to 0. Use createAudioRecorderDeviceList() to get a list of all deviceIDs. - \param sdk_version_do_not_use Don't use or change this parameter. Always set it to - IRRKLANG_SDK_VERSION, which is done by default. This is needed for sdk version checks. - \return Returns pointer to the created irrKlang device or null if the - device could not be created. If you don't need the device, use ISoundEngine::drop() to - delete it. See IRefCounted::drop() for details. - */ - IRRKLANG_API IAudioRecorder* IRRKLANGCALLCONV createIrrKlangAudioRecorder( - ISoundEngine* irrKlangDeviceForPlayback, - E_SOUND_OUTPUT_DRIVER driver = ESOD_AUTO_DETECT, - const char* deviceID = 0, - const char* sdk_version_do_not_use = IRR_KLANG_VERSION); - - //! Creates a list of available recording devices for the driver type. - /** The device IDs in this list can be used as parameter to createIrrKlangAudioRecorder() to - make irrKlang use a special recording device. - \param driver The sound output driver of which the list is generated. Set it irrklang::ESOD_AUTO_DETECT - to let this function use the same device as createIrrKlangDevice() would choose. - \param sdk_version_do_not_use Don't use or change this parameter. Always set it to - IRRKLANG_SDK_VERSION, which is done by default. This is needed for sdk version checks. - \return Returns a pointer to the list of enumerated recording devices for the selected sound driver. - The device IDs in this list can be used as parameter to createIrrKlangAudioRecorder() to - make irrKlang use a special sound device. - After you don't need the list anymore, call ISoundDeviceList::drop() in order to free its memory. */ - IRRKLANG_API ISoundDeviceList* IRRKLANGCALLCONV createAudioRecorderDeviceList( - E_SOUND_OUTPUT_DRIVER driver = ESOD_AUTO_DETECT, - const char* sdk_version_do_not_use = IRR_KLANG_VERSION); - - - //! Converts a wchar_t string to an utf8 string, useful when using Windows in unicode mode. - /** irrKlang works with unicode file names, and accepts char* strings as parameters for names and filenames. - If you are running irrKlang in Windows, and working with wchar_t* pointers instead of char* ones, - you can use this function to create a char* (UTF8) representation of your wchar_t* (UTF16) string. - Works for filenames and other strings. - \param pInputString zero terminated input string. - \param pOutputBuffer the buffer where the converted string is written to. Be sure that this buffer - has a big enough size. A good size would be three times the string length of your input buffer, like - wcslen(yourInputBuffer)*3. Because each wchar_t can be represented by up to 3 chars. - \param outputBufferSize size of your output buffer. - \return Returns true if successful, and false if not. If 'false' is returned, maybe your buffer was too small. */ - IRRKLANG_API bool IRRKLANGCALLCONV makeUTF8fromUTF16string( - const wchar_t* pInputString, char* pOutputBuffer, int outputBufferSize); - - -} // end namespace irrklang - - -/*! \file irrKlang.h - \brief Main header file of the irrKlang sound library, the only file needed to include. -*/ - -#endif - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/lib/Winx64-visualStudio/irrKlang.exp b/BAKKA Editor/irrKlang-64bit-1.6.0/lib/Winx64-visualStudio/irrKlang.exp deleted file mode 100644 index 1bc0d79..0000000 Binary files a/BAKKA Editor/irrKlang-64bit-1.6.0/lib/Winx64-visualStudio/irrKlang.exp and /dev/null differ diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/lib/Winx64-visualStudio/irrKlang.lib b/BAKKA Editor/irrKlang-64bit-1.6.0/lib/Winx64-visualStudio/irrKlang.lib deleted file mode 100644 index 4c469ca..0000000 Binary files a/BAKKA Editor/irrKlang-64bit-1.6.0/lib/Winx64-visualStudio/irrKlang.lib and /dev/null differ diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/ikpFlac.dll b/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/ikpFlac.dll new file mode 100644 index 0000000..2271a3f Binary files /dev/null and b/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/ikpFlac.dll differ diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/ikpMP3.dll b/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/ikpMP3.dll new file mode 100644 index 0000000..b913400 Binary files /dev/null and b/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/ikpMP3.dll differ diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/irrKlang.NET4.dll b/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/irrKlang.NET4.dll new file mode 100644 index 0000000..ef53ee5 Binary files /dev/null and b/BAKKA Editor/irrKlang-64bit-1.6.0/lib/dotnet-4-64/irrKlang.NET4.dll differ diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamLoaderMP3.cpp b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamLoaderMP3.cpp deleted file mode 100644 index 448eac6..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamLoaderMP3.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2002-2007 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#include "CIrrKlangAudioStreamLoaderMP3.h" -#include "CIrrKlangAudioStreamMP3.h" -#include - - -namespace irrklang -{ - - -CIrrKlangAudioStreamLoaderMP3::CIrrKlangAudioStreamLoaderMP3() -{ -} - - -//! Returns true if the file maybe is able to be loaded by this class. -bool CIrrKlangAudioStreamLoaderMP3::isALoadableFileExtension(const ik_c8* fileName) -{ - return strstr(fileName, ".mp3") != 0; -} - - -//! Creates an audio file input stream from a file -IAudioStream* CIrrKlangAudioStreamLoaderMP3::createAudioStream(irrklang::IFileReader* file) -{ - CIrrKlangAudioStreamMP3* stream = new CIrrKlangAudioStreamMP3(file); - - if (stream && !stream->isOK()) - { - stream->drop(); - stream = 0; - } - - return stream; -} - - -} // end namespace irrklang - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamLoaderMP3.h b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamLoaderMP3.h deleted file mode 100644 index 6c9ac77..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamLoaderMP3.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2002-2007 Nikolaus Gebhardt -// This file is part of the "irrKlang" library. -// For conditions of distribution and use, see copyright notice in irrKlang.h - -#ifndef __C_IRRKLANG_AUDIO_STREAM_LOADER_MP3_H_INCLUDED__ -#define __C_IRRKLANG_AUDIO_STREAM_LOADER_MP3_H_INCLUDED__ - -#include - -namespace irrklang -{ - //! Class which is able to create an audio file stream from a file. - class CIrrKlangAudioStreamLoaderMP3 : public IAudioStreamLoader - { - public: - - CIrrKlangAudioStreamLoaderMP3(); - - //! Returns true if the file maybe is able to be loaded by this class. - /** This decision should be based only on the file extension (e.g. ".wav") */ - virtual bool isALoadableFileExtension(const ik_c8* fileName); - - //! Creates an audio file input stream from a file - /** \return Pointer to the created audio stream. Returns 0 if loading failed. - If you no longer need the stream, you should call IAudioFileStream::drop(). - See IRefCounted::drop() for more information. */ - virtual IAudioStream* createAudioStream(irrklang::IFileReader* file); - }; - -} // end namespace irrklang - -#endif diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamMP3.cpp b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamMP3.cpp deleted file mode 100644 index 0deed57..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamMP3.cpp +++ /dev/null @@ -1,397 +0,0 @@ -// Copyright (C) 2002-2007 Nikolaus Gebhardt -// Part of the code for this plugin for irrKlang is based on: -// MP3 input for Audiere by Matt Campbell , based on -// libavcodec from ffmpeg (http://ffmpeg.sourceforge.net/). -// See license.txt for license details of this plugin. - -#include "CIrrKlangAudioStreamMP3.h" -#include -#include // free, malloc and realloc -#include - -namespace irrklang -{ - -CIrrKlangAudioStreamMP3::CIrrKlangAudioStreamMP3(IFileReader* file) -: File(file), TheMPAuDecContext(0), InputPosition(0), InputLength(0), - DecodeBuffer(0), FirstFrameRead(false), EndOfFileReached(0), - FileBegin(0), Position(0) -{ - if (File) - { - File->grab(); - - TheMPAuDecContext = new MPAuDecContext(); - - if (!TheMPAuDecContext || mpaudec_init(TheMPAuDecContext) < 0) - { - File->drop(); - File = 0; - delete TheMPAuDecContext; - TheMPAuDecContext = 0; - return; - } - - // init, get format - - DecodeBuffer = new ik_u8[MPAUDEC_MAX_AUDIO_FRAME_SIZE]; - - if (File->getSize()>0) - { - // seekable file, now parse file to get size - // (needed to make it possible for the engine to loop a stream correctly) - - skipID3IfNecessary(); - - TheMPAuDecContext->parse_only = 1; - Format.FrameCount = 0; - - while(!EndOfFileReached) - { - if (!decodeFrame()) - break; - - Format.FrameCount += TheMPAuDecContext->frame_size; - - if (!EndOfFileReached /*&& File->isSeekable()*/ ) - { - // to be able to seek in the stream, store offsets and sizes - - SFramePositionData data; - data.size = TheMPAuDecContext->frame_size; - data.offset = File->getPos() - (InputLength - InputPosition) - TheMPAuDecContext->coded_frame_size; - - FramePositionData.push_back(data); - } - } - - TheMPAuDecContext->parse_only = 0; - setPosition(0); - } - else - decodeFrame(); // decode first frame to read audio format - - if (!TheMPAuDecContext->channels || - !TheMPAuDecContext->sample_rate ) - { - File->drop(); - File = 0; - delete TheMPAuDecContext; - TheMPAuDecContext = 0; - return; - } - } -} - -CIrrKlangAudioStreamMP3::~CIrrKlangAudioStreamMP3() -{ - if (File) - File->drop(); - - if (TheMPAuDecContext) - { - mpaudec_clear(TheMPAuDecContext); - delete TheMPAuDecContext; - } - - delete [] DecodeBuffer; -} - - - -//! returns format of the audio stream -SAudioStreamFormat CIrrKlangAudioStreamMP3::getFormat() -{ - return Format; -} - - -//! tells the audio stream to read n audio frames into the specified buffer -ik_s32 CIrrKlangAudioStreamMP3::readFrames(void* target, ik_s32 frameCountToRead) -{ - const int frameSize = Format.getFrameSize(); - - int framesRead = 0; - ik_u8* out = (ik_u8*)target; - - while (framesRead < frameCountToRead) - { - // no more samples? ask the MP3 for more - if (DecodedQueue.getSize() < frameSize) - { - if (!decodeFrame() || EndOfFileReached) - return framesRead; - - // if the buffer is still empty, we are done - if (DecodedQueue.getSize() < frameSize) - return framesRead; - } - - const int framesLeft = frameCountToRead - framesRead; - const int dequeSize = DecodedQueue.getSize() / frameSize; - const int framesToRead = framesLeft < dequeSize ? framesLeft : dequeSize; - - DecodedQueue.read(out, framesToRead * frameSize); - - out += framesToRead * frameSize; - framesRead += framesToRead; - Position += framesToRead; - } - - return framesRead; -} - - - -bool CIrrKlangAudioStreamMP3::decodeFrame() -{ - int outputSize = 0; - - while (!outputSize) - { - if (InputPosition == InputLength) - { - InputPosition = 0; - InputLength = File->read(InputBuffer, IKP_MP3_INPUT_BUFFER_SIZE); - - if (InputLength == 0) - { - EndOfFileReached = true; - return true; - } - } - - int rv = mpaudec_decode_frame( TheMPAuDecContext, (ik_s16*)DecodeBuffer, - &outputSize, - (ik_u8*)InputBuffer + InputPosition, - InputLength - InputPosition); - - if (rv < 0) - return false; - - InputPosition += rv; - } // end while - - if (!FirstFrameRead) - { - Format.ChannelCount = TheMPAuDecContext->channels; - Format.SampleRate = TheMPAuDecContext->sample_rate; - Format.SampleFormat = ESF_S16; - Format.FrameCount = -1; // unknown lenght - - FirstFrameRead = true; - } - else - if (TheMPAuDecContext->channels != Format.ChannelCount || - TheMPAuDecContext->sample_rate != Format.SampleRate) - { - // Can't handle format changes mid-stream. - return false; - } - - if (!TheMPAuDecContext->parse_only) - { - if (outputSize < 0) - { - // Couldn't decode this frame. Too bad, already lost it. - // This should only happen when seeking. - - outputSize = TheMPAuDecContext->frame_size; - memset(DecodeBuffer, 0, outputSize * Format.getFrameSize()); - } - - DecodedQueue.write(DecodeBuffer, outputSize); - } - - return true; -} - - - -//! sets the position of the audio stream. -/** For example to let the stream be read from the beginning of the file again, -setPosition(0) would be called. This is usually done be the sound engine to -loop a stream after if has reached the end. Return true if sucessful and 0 if not. */ -bool CIrrKlangAudioStreamMP3::setPosition(ik_s32 pos) -{ - if (!File || !TheMPAuDecContext) - return false; - - if (pos == 0) - { - // usually done for looping, just reset to start - - File->seek(FileBegin); // skip possible ID3 header - - EndOfFileReached = false; - - DecodedQueue.clear(); - - MPAuDecContext oldContext = *TheMPAuDecContext; - - mpaudec_clear(TheMPAuDecContext); - mpaudec_init(TheMPAuDecContext); - - TheMPAuDecContext->bit_rate = oldContext.bit_rate; - TheMPAuDecContext->channels = oldContext.channels; - TheMPAuDecContext->frame_size = oldContext.frame_size; - TheMPAuDecContext->sample_rate = oldContext.sample_rate; - - InputPosition = 0; - InputLength = 0; - Position = 0; - CurrentFramePosition = 0; - - return true; - } - else - { - // user wants to seek in the stream, so do this here - - int scan_position = 0; - int target_frame = 0; - int frame_count = (int)FramePositionData.size(); - - while (target_frame < frame_count) - { - int frame_size = FramePositionData[target_frame].size; - - if (pos <= scan_position + frame_size) - break; - else - { - scan_position += frame_size; - target_frame++; - } - } - - - const int MAX_FRAME_DEPENDENCY = 10; - target_frame = std::max(0, target_frame - MAX_FRAME_DEPENDENCY); - setPosition(0); - - File->seek(FramePositionData[target_frame].offset, false); - - int i; - for (i = 0; i < target_frame; i++) - { - if (i>=(int)FramePositionData.size()) - { - // internal error - setPosition(0); - return false; - } - - Position += FramePositionData[i].size; - } - - if (!decodeFrame() || EndOfFileReached) - { - setPosition(0); - return false; - } - - int frames_to_consume = pos - Position; // PCM frames now - if (frames_to_consume > 0) - { - ik_u8 *buf = new ik_u8[frames_to_consume * Format.getFrameSize()]; - readFrames(buf, frames_to_consume); - delete[] buf; - } - - return true; - } - - return false; -} - - -CIrrKlangAudioStreamMP3::QueueBuffer::QueueBuffer() -{ - Capacity = 256; - Size = 0; - - Buffer = (ik_u8*)malloc(Capacity); -} - - -CIrrKlangAudioStreamMP3::QueueBuffer::~QueueBuffer() -{ - free(Buffer); -} - -int CIrrKlangAudioStreamMP3::QueueBuffer::getSize() -{ - return Size; -} - -void CIrrKlangAudioStreamMP3::QueueBuffer::write(const void* buffer, int size) -{ - bool needRealloc = false; - - while (size + Size > Capacity) - { - Capacity *= 2; - needRealloc = true; - } - - if (needRealloc) - { - Buffer = (ik_u8*)realloc(Buffer, Capacity); - } - - memcpy(Buffer + Size, buffer, size); - Size += size; -} - - -int CIrrKlangAudioStreamMP3::QueueBuffer::read(void* buffer, int size) -{ - int toRead = size < Size ? size : Size; - - memcpy(buffer, Buffer, toRead); - memmove(Buffer, Buffer + toRead, Size - toRead); - - Size -= toRead; - return toRead; -} - - -void CIrrKlangAudioStreamMP3::QueueBuffer::clear() -{ - Size = 0; -} - - -void CIrrKlangAudioStreamMP3::skipID3IfNecessary() -{ - char header[10]; - int read = File->read(&header, 10); - - if (read == 10 && - header[0] == 'I' && header[1] == 'D' && header[2] == '3') - { - int versionMajor = header[3]; - int versionMinor = header[4]; - int flags = header[5]; - - // IDv2 size looks like the following: ID3v2 size 4 * %0xxxxxxx. - // Sick, but that's how it works. - - int size = 0; - size = (header[6] & 0x7f) << (3*7); - size |= (header[7] & 0x7f) << (2*7); - size |= (header[8] & 0x7f) << (1*7); - size |= (header[9] & 0x7f) ; - - size += 10; // header size - - FileBegin = size; - File->seek(FileBegin); - } - else - File->seek(0); -} - - -} // end namespace irrklang diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamMP3.h b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamMP3.h deleted file mode 100644 index c9b3aae..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/CIrrKlangAudioStreamMP3.h +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (C) 2002-2007 Nikolaus Gebhardt -// Part of the code for this plugin for irrKlang is based on: -// MP3 input for Audiere by Matt Campbell , based on -// libavcodec from ffmpeg (http://ffmpeg.sourceforge.net/). -// See license.txt for license details of this plugin. - -#ifndef __C_IRRKLANG_AUDIO_STREAM_MP3_H_INCLUDED__ -#define __C_IRRKLANG_AUDIO_STREAM_MP3_H_INCLUDED__ - -#include -#include -#include -#include "decoder/mpaudec.h" - -namespace irrklang -{ - const int IKP_MP3_INPUT_BUFFER_SIZE = 4096; - - //! Reads and decodes audio data into an usable audio stream for the ISoundEngine - /** To extend irrKlang with new audio format decoders, the only thing needed to do - is implementing the IAudioStream interface. All the code available in this class is only for - mp3 decoding and may make this class look a bit more complicated then it actually is. */ - class CIrrKlangAudioStreamMP3 : public IAudioStream - { - public: - - CIrrKlangAudioStreamMP3(IFileReader* file); - ~CIrrKlangAudioStreamMP3(); - - //! returns format of the audio stream - virtual SAudioStreamFormat getFormat(); - - //! tells the audio stream to read n audio frames into the specified buffer - /** \param target: Target data buffer to the method will write the read frames into. The - specified buffer will be getFormat().getFrameSize()*frameCount big. - \param frameCount: amount of frames to be read. - \returns Returns amount of frames really read. Should be frameCountToRead in most cases. */ - virtual ik_s32 readFrames(void* target, ik_s32 frameCountToRead); - - //! sets the position of the audio stream. - /** For example to let the stream be read from the beginning of the file again, - setPosition(0) would be called. This is usually done be the sound engine to - loop a stream after if has reached the end. Return true if sucessful and 0 if not. */ - virtual bool setPosition(ik_s32 pos); - - // just for the CIrrKlangAudioStreamLoaderMP3 to let him know if loading worked - bool isOK() { return File != 0; } - - protected: - - ik_s32 readFrameForMP3(void* target, ik_s32 frameCountToRead, bool parseOnly=false); - bool decodeFrame(); - void skipID3IfNecessary(); - - irrklang::IFileReader* File; - SAudioStreamFormat Format; - - // mpaudec specific - MPAuDecContext* TheMPAuDecContext; - - ik_u8 InputBuffer[IKP_MP3_INPUT_BUFFER_SIZE]; - - int InputPosition; - int InputLength; - int Position; - ik_u8* DecodeBuffer; - ik_s32 FileBegin; - ik_u32 CurrentFramePosition; - - bool FirstFrameRead; - bool EndOfFileReached; - - // helper class for managing the streaming decoded audio data - class QueueBuffer - { - public: - - QueueBuffer(); - ~QueueBuffer(); - - int getSize(); - void write(const void* buffer, int size); - int read(void* buffer, int size); - void clear(); - - private: - - ik_u8* Buffer; - int Capacity; - int Size; - }; - - struct SFramePositionData - { - int offset; - int size; - }; - - std::vector FramePositionData; - QueueBuffer DecodedQueue; - }; - - -} // end namespace irrklang - -#endif diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/bits.c b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/bits.c deleted file mode 100644 index d7657e4..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/bits.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Common bit i/o utils - * Copyright (c) 2000, 2001 Fabrice Bellard. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Modified by Matt Campbell for the stand-alone - * mpaudec library. Based on common.c from libavcodec. - */ - -#include "internal.h" - -/** - * init GetBitContext. - * @param buffer bitstream buffer - * @param bit_size the size of the buffer in bits - */ -void init_get_bits(GetBitContext *s, - const uint8_t *buffer, int bit_size) -{ - s->buffer= buffer; - s->size_in_bits= bit_size; - s->index=0; -} - -unsigned int show_bits(const GetBitContext *s, int n) -{ - int i; - unsigned int result = 0; - assert(s->size_in_bits - s->index >= n); - for (i = s->index; i < s->index + n; i++) { - int byte_index = i / 8; - unsigned int right_shift = 7 - (i % 8); - uint8_t byte = s->buffer[byte_index]; - uint8_t bit; - result <<= 1; - if (right_shift == 0) - bit = byte & 0x1; - else - bit = (byte >> right_shift) & 0x1; - result |= (unsigned int)bit; - } - return result; -} - -void skip_bits(GetBitContext *s, int n) -{ - s->index += n; -} - -unsigned int get_bits(GetBitContext *s, int n) -{ - unsigned int result = show_bits(s, n); - skip_bits(s, n); - return result; -} - -int get_bits_count(const GetBitContext *s) -{ - return s->index; -} - -/* VLC decoding */ - -/*#define DEBUG_VLC*/ - -#define GET_DATA(v, table, i, wrap, size) \ -{\ - const uint8_t *ptr = (const uint8_t *)table + i * wrap;\ - switch(size) {\ - case 1:\ - v = *(const uint8_t *)ptr;\ - break;\ - case 2:\ - v = *(const uint16_t *)ptr;\ - break;\ - default:\ - v = *(const uint32_t *)ptr;\ - break;\ - }\ -} - - -static int alloc_table(VLC *vlc, int size) -{ - int index; - index = vlc->table_size; - vlc->table_size += size; - if (vlc->table_size > vlc->table_allocated) { - vlc->table_allocated += (1 << vlc->bits); - vlc->table = realloc(vlc->table, - sizeof(VLC_TYPE) * 2 * vlc->table_allocated); - if (!vlc->table) - return -1; - } - return index; -} - -static int build_table(VLC *vlc, int table_nb_bits, - int nb_codes, - const void *bits, int bits_wrap, int bits_size, - const void *codes, int codes_wrap, int codes_size, - uint32_t code_prefix, int n_prefix) -{ - int i, j, k, n, table_size, table_index, nb, n1, index; - uint32_t code; - VLC_TYPE (*table)[2]; - - table_size = 1 << table_nb_bits; - table_index = alloc_table(vlc, table_size); -#ifdef DEBUG_VLC - printf("new table index=%d size=%d code_prefix=%x n=%d\n", - table_index, table_size, code_prefix, n_prefix); -#endif - if (table_index < 0) - return -1; - table = &vlc->table[table_index]; - - for(i=0;i 0 && (code >> n) == code_prefix) { - if (n <= table_nb_bits) { - /* no need to add another table */ - j = (code << (table_nb_bits - n)) & (table_size - 1); - nb = 1 << (table_nb_bits - n); - for(k=0;k> n) & ((1 << table_nb_bits) - 1); -#ifdef DEBUG_VLC - printf("%4x: n=%d (subtable)\n", - j, n); -#endif - /* compute table size */ - n1 = -table[j][1]; /*bits*/ - if (n > n1) - n1 = n; - table[j][1] = -n1; /*bits*/ - } - } - } - - /* second pass : fill auxillary tables recursively */ - for(i=0;i table_nb_bits) { - n = table_nb_bits; - table[i][1] = -n; /*bits*/ - } - index = build_table(vlc, n, nb_codes, - bits, bits_wrap, bits_size, - codes, codes_wrap, codes_size, - (code_prefix << table_nb_bits) | i, - n_prefix + table_nb_bits); - if (index < 0) - return -1; - /* note: realloc has been done, so reload tables */ - table = &vlc->table[table_index]; - table[i][0] = index; /*code*/ - } - } - return table_index; -} - - -/* Build VLC decoding tables suitable for use with get_vlc(). - - 'nb_bits' set thee decoding table size (2^nb_bits) entries. The - bigger it is, the faster is the decoding. But it should not be too - big to save memory and L1 cache. '9' is a good compromise. - - 'nb_codes' : number of vlcs codes - - 'bits' : table which gives the size (in bits) of each vlc code. - - 'codes' : table which gives the bit pattern of of each vlc code. - - 'xxx_wrap' : give the number of bytes between each entry of the - 'bits' or 'codes' tables. - - 'xxx_size' : gives the number of bytes of each entry of the 'bits' - or 'codes' tables. - - 'wrap' and 'size' allows to use any memory configuration and types - (byte/word/long) to store the 'bits' and 'codes' tables. -*/ -int init_vlc(VLC *vlc, int nb_bits, int nb_codes, - const void *bits, int bits_wrap, int bits_size, - const void *codes, int codes_wrap, int codes_size) -{ - vlc->bits = nb_bits; - vlc->table = NULL; - vlc->table_allocated = 0; - vlc->table_size = 0; -#ifdef DEBUG_VLC - printf("build table nb_codes=%d\n", nb_codes); -#endif - - if (build_table(vlc, nb_bits, nb_codes, - bits, bits_wrap, bits_size, - codes, codes_wrap, codes_size, - 0, 0) < 0) { - free(vlc->table); - return -1; - } - return 0; -} - - -void free_vlc(VLC *vlc) -{ - free(vlc->table); -} - -int get_vlc(GetBitContext *s, const VLC *vlc) -{ - int code = 0; - int depth = 0, max_depth = 3; - int n, index, bits = vlc->bits; - - do { - index = show_bits(s, bits) + code; - code = vlc->table[index][0]; - n = vlc->table[index][1]; - depth++; - - if (n < 0 && depth < max_depth) { - skip_bits(s, bits); - bits = -n; - } - } while (n < 0 && depth < max_depth); - - skip_bits(s, n); - return code; -} diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/internal.h b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/internal.h deleted file mode 100644 index 5588137..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/internal.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Based on common.h from libavcodec. Modified extensively by Matt Campbell - for the stand-alone mpaudec library. */ - -#ifndef INTERNAL_H -#define INTERNAL_H - -#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) -# define CONFIG_WIN32 -#endif - -#include -#include -#include -#include -#include -#include -#include "mpaudec.h" - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#ifdef CONFIG_WIN32 - -/* windows */ - -typedef unsigned short uint16_t; -typedef signed short int16_t; -typedef unsigned char uint8_t; -typedef unsigned int uint32_t; -typedef unsigned __int64 uint64_t; -typedef signed char int8_t; -typedef signed int int32_t; -typedef signed __int64 int64_t; - -# ifdef _DEBUG -# define DEBUG -# endif - -/* CONFIG_WIN32 end */ -#else - -/* unix */ - -#include - -#endif /* !CONFIG_WIN32 */ - -/* debug stuff */ - -#if !defined(DEBUG) && !defined(NDEBUG) -# define NDEBUG -#endif -#include - -/* bit input */ - -typedef struct GetBitContext { - const uint8_t *buffer; - int index; - int size_in_bits; -} GetBitContext; - -int get_bits_count(const GetBitContext *s); - -#define VLC_TYPE int16_t - -typedef struct VLC { - int bits; - VLC_TYPE (*table)[2]; - int table_size, table_allocated; -} VLC; - -unsigned int get_bits(GetBitContext *s, int n); -unsigned int show_bits(const GetBitContext *s, int n); -void skip_bits(GetBitContext *s, int n); -void init_get_bits(GetBitContext *s, - const uint8_t *buffer, int buffer_size); - -int init_vlc(VLC *vlc, int nb_bits, int nb_codes, - const void *bits, int bits_wrap, int bits_size, - const void *codes, int codes_wrap, int codes_size); -void free_vlc(VLC *vlc); -int get_vlc(GetBitContext *s, const VLC *vlc); - -#endif /* INTERNAL_H */ diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudec.c b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudec.c deleted file mode 100644 index a07289d..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudec.c +++ /dev/null @@ -1,2477 +0,0 @@ -/* - * MPEG Audio decoder - * Copyright (c) 2001, 2002 Fabrice Bellard. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Modified heavily by Matt Campbell for the - * stand-alone mpaudec library. Based on mpegaudiodec.c from libavcodec. - */ - -/*#define DEBUG*/ -#include "internal.h" -#include "mpegaudio.h" - -#ifdef _MSC_VER -#pragma warning(disable : 4244) -#endif - -/* - * TODO: - * - in low precision mode, use more 16 bit multiplies in synth filter - * - test lsf / mpeg25 extensively. - */ - -/* define USE_HIGHPRECISION to have a bit exact (but slower) mpeg - audio decoder */ -#define USE_HIGHPRECISION - -#ifdef USE_HIGHPRECISION -#define FRAC_BITS 23 /* fractional bits for sb_samples and dct */ -#define WFRAC_BITS 16 /* fractional bits for window */ -#else -#define FRAC_BITS 15 /* fractional bits for sb_samples and dct */ -#define WFRAC_BITS 14 /* fractional bits for window */ -#endif - -#define FRAC_ONE (1 << FRAC_BITS) - -#define MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS) -#define MUL64(a,b) ((int64_t)(a) * (int64_t)(b)) -#define FIX(a) ((int)((a) * FRAC_ONE)) -/* WARNING: only correct for posititive numbers */ -#define FIXR(a) ((int)((a) * FRAC_ONE + 0.5)) -#define FRAC_RND(a) (((a) + (FRAC_ONE/2)) >> FRAC_BITS) - -#if FRAC_BITS <= 15 -typedef int16_t MPA_INT; -#else -typedef int32_t MPA_INT; -#endif - -/****************/ - -#define HEADER_SIZE 4 -#define BACKSTEP_SIZE 512 - -typedef struct MPADecodeContext { - uint8_t inbuf1[2][MPA_MAX_CODED_FRAME_SIZE + BACKSTEP_SIZE]; /* input buffer */ - int inbuf_index; - uint8_t *inbuf_ptr, *inbuf; - int frame_size; - int free_format_frame_size; /* frame size in case of free format - (zero if currently unknown) */ - /* next header (used in free format parsing) */ - int error_protection; - int layer; - int sample_rate; - int sample_rate_index; /* between 0 and 8 */ - int bit_rate; - int old_frame_size; - GetBitContext gb; - int nb_channels; - int mode; - int mode_ext; - int lsf; - MPA_INT synth_buf[MPA_MAX_CHANNELS][512 * 2]; - int synth_buf_offset[MPA_MAX_CHANNELS]; - int32_t sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]; - int32_t mdct_buf[MPA_MAX_CHANNELS][SBLIMIT * 18]; /* previous samples, for layer 3 MDCT */ -#ifdef DEBUG - int frame_count; -#endif -} MPADecodeContext; - -/* layer 3 "granule" */ -typedef struct GranuleDef { - uint8_t scfsi; - int part2_3_length; - int big_values; - int global_gain; - int scalefac_compress; - uint8_t block_type; - uint8_t switch_point; - int table_select[3]; - int subblock_gain[3]; - uint8_t scalefac_scale; - uint8_t count1table_select; - int region_size[3]; /* number of huffman codes in each region */ - int preflag; - int short_start, long_end; /* long/short band indexes */ - uint8_t scale_factors[40]; - int32_t sb_hybrid[SBLIMIT * 18]; /* 576 samples */ -} GranuleDef; - -#define MODE_EXT_MS_STEREO 2 -#define MODE_EXT_I_STEREO 1 - -/* layer 3 huffman tables */ -typedef struct HuffTable { - int xsize; - const uint8_t *bits; - const uint16_t *codes; -} HuffTable; - -#include "mpaudectab.h" - -/* vlc structure for decoding layer 3 huffman tables */ -static VLC huff_vlc[16]; -static uint8_t *huff_code_table[16]; -static VLC huff_quad_vlc[2]; -/* computed from band_size_long */ -static uint16_t band_index_long[9][23]; -/* XXX: free when all decoders are closed */ -#define TABLE_4_3_SIZE (8191 + 16) -static int8_t table_4_3_exp[TABLE_4_3_SIZE]; -#if FRAC_BITS <= 15 -static uint16_t table_4_3_value[TABLE_4_3_SIZE]; -#else -static uint32_t table_4_3_value[TABLE_4_3_SIZE]; -#endif -/* intensity stereo coef table */ -static int32_t is_table[2][16]; -static int32_t is_table_lsf[2][2][16]; -static int32_t csa_table[8][2]; -static int32_t mdct_win[8][36]; - -/* lower 2 bits: modulo 3, higher bits: shift */ -static uint16_t scale_factor_modshift[64]; -/* [i][j]: 2^(-j/3) * FRAC_ONE * 2^(i+2) / (2^(i+2) - 1) */ -static int32_t scale_factor_mult[15][3]; -/* mult table for layer 2 group quantization */ - -#define SCALE_GEN(v) \ -{ FIXR(1.0 * (v)), FIXR(0.7937005259 * (v)), FIXR(0.6299605249 * (v)) } - -static int32_t scale_factor_mult2[3][3] = { - SCALE_GEN(4.0 / 3.0), /* 3 steps */ - SCALE_GEN(4.0 / 5.0), /* 5 steps */ - SCALE_GEN(4.0 / 9.0), /* 9 steps */ -}; - -/* 2^(n/4) */ -static uint32_t scale_factor_mult3[4] = { - FIXR(1.0), - FIXR(1.18920711500272106671), - FIXR(1.41421356237309504880), - FIXR(1.68179283050742908605), -}; - -static MPA_INT window[512]; - -/* layer 1 unscaling */ -/* n = number of bits of the mantissa minus 1 */ -static int l1_unscale(int n, int mant, int scale_factor) -{ - int shift, mod; - int64_t val; - - shift = scale_factor_modshift[scale_factor]; - mod = shift & 3; - shift >>= 2; - val = MUL64(mant + (-1 << n) + 1, scale_factor_mult[n-1][mod]); - shift += n; - /* NOTE: at this point, 1 <= shift >= 21 + 15 */ - return (int)((val + ((int64_t)(1) << (shift - 1))) >> shift); -} - -static int l2_unscale_group(int steps, int mant, int scale_factor) -{ - int shift, mod, val; - - shift = scale_factor_modshift[scale_factor]; - mod = shift & 3; - shift >>= 2; - - val = (mant - (steps >> 1)) * scale_factor_mult2[steps >> 2][mod]; - /* NOTE: at this point, 0 <= shift <= 21 */ - if (shift > 0) - val = (val + (1 << (shift - 1))) >> shift; - return val; -} - -/* compute value^(4/3) * 2^(exponent/4). It normalized to FRAC_BITS */ -static int l3_unscale(int value, int exponent) -{ -#if FRAC_BITS <= 15 - unsigned int m; -#else - uint64_t m; -#endif - int e; - - e = table_4_3_exp[value]; - e += (exponent >> 2); - e = FRAC_BITS - e; -#if FRAC_BITS <= 15 - if (e > 31) - e = 31; -#endif - m = table_4_3_value[value]; -#if FRAC_BITS <= 15 - m = (m * scale_factor_mult3[exponent & 3]); - m = (m + (1 << (e-1))) >> e; - return m; -#else - m = MUL64(m, scale_factor_mult3[exponent & 3]); - m = (m + ((uint64_t)(1) << (e-1))) >> e; - return (int)m; -#endif -} - -/* all integer n^(4/3) computation code */ -#define DEV_ORDER 13 - -#define POW_FRAC_BITS 24 -#define POW_FRAC_ONE (1 << POW_FRAC_BITS) -#define POW_FIX(a) ((int)((a) * POW_FRAC_ONE)) -#define POW_MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> POW_FRAC_BITS) - -static int dev_4_3_coefs[DEV_ORDER]; - -static int pow_mult3[3] = { - POW_FIX(1.0), - POW_FIX(1.25992104989487316476), - POW_FIX(1.58740105196819947474), -}; - -static void int_pow_init(void) -{ - int i, a; - - a = POW_FIX(1.0); - for(i=0;i= 0; j--) - a1 = POW_MULL(a, dev_4_3_coefs[j] + a1); - a = (1 << POW_FRAC_BITS) + a1; - /* exponent compute (exact) */ - e = e * 4; - er = e % 3; - eq = e / 3; - a = POW_MULL(a, pow_mult3[er]); - while (a >= 2 * POW_FRAC_ONE) { - a = a >> 1; - eq++; - } - /* convert to float */ - while (a < POW_FRAC_ONE) { - a = a << 1; - eq--; - } - /* now POW_FRAC_ONE <= a < 2 * POW_FRAC_ONE */ -#if POW_FRAC_BITS > FRAC_BITS - a = (a + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS); - /* correct overflow */ - if (a >= 2 * (1 << FRAC_BITS)) { - a = a >> 1; - eq++; - } -#endif - *exp_ptr = eq; - return a; -} - -int mpaudec_init(MPAuDecContext * mpctx) -{ - MPADecodeContext *s; - static int init=0; - int i, j, k; - assert(mpctx != NULL); - memset(mpctx, 0, sizeof(MPAuDecContext)); - mpctx->priv_data = calloc(1, sizeof(MPADecodeContext)); - if (mpctx->priv_data == NULL) - return -1; - s = mpctx->priv_data; - - if (!init && !mpctx->parse_only) { - /* scale factors table for layer 1/2 */ - for(i=0;i<64;i++) { - int shift, mod; - /* 1.0 (i = 3) is normalized to 2 ^ FRAC_BITS */ - shift = (i / 3); - mod = i % 3; - scale_factor_modshift[i] = mod | (shift << 2); - } - - /* scale factor multiply for layer 1 */ - for(i=0;i<15;i++) { - int n, norm; - n = i + 2; - norm = (((int64_t)(1) << n) * FRAC_ONE) / ((1 << n) - 1); - scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm); - scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm); - scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm); -#ifdef DEBUG - printf("%d: norm=%x s=%x %x %x\n", - i, norm, - scale_factor_mult[i][0], - scale_factor_mult[i][1], - scale_factor_mult[i][2]); -#endif - } - - /* window */ - /* max = 18760, max sum over all 16 coefs : 44736 */ - for(i=0;i<257;i++) { - int v; - v = mpa_enwindow[i]; -#if WFRAC_BITS < 16 - v = (v + (1 << (16 - WFRAC_BITS - 1))) >> (16 - WFRAC_BITS); -#endif - window[i] = v; - if ((i & 63) != 0) - v = -v; - if (i != 0) - window[512 - i] = v; - } - - /* huffman decode tables */ - huff_code_table[0] = NULL; - for(i=1;i<16;i++) { - const HuffTable *h = &mpa_huff_tables[i]; - int xsize, x, y; - unsigned int n; - uint8_t *code_table; - - xsize = h->xsize; - n = xsize * xsize; - /* XXX: fail test */ - init_vlc(&huff_vlc[i], 8, n, - h->bits, 1, 1, h->codes, 2, 2); - - code_table = calloc(n, 1); - j = 0; - for(x=0;x> 1); - f = pow(2.0, e / 4.0); - k = i & 1; - is_table_lsf[j][k ^ 1][i] = FIXR(f); - is_table_lsf[j][k][i] = FIXR(1.0); -#ifdef DEBUG - printf("is_table_lsf %d %d: %x %x\n", - i, j, is_table_lsf[j][0][i], is_table_lsf[j][1][i]); -#endif - } - } - - for(i=0;i<8;i++) { - float ci, cs, ca; - ci = ci_table[i]; - cs = 1.0 / sqrt(1.0 + ci * ci); - ca = cs * ci; - csa_table[i][0] = FIX(cs); - csa_table[i][1] = FIX(ca); - } - - /* compute mdct windows */ - for(i=0;i<36;i++) { - int v; - v = FIXR(sin(M_PI * (i + 0.5) / 36.0)); - mdct_win[0][i] = v; - mdct_win[1][i] = v; - mdct_win[3][i] = v; - } - for(i=0;i<6;i++) { - mdct_win[1][18 + i] = FIXR(1.0); - mdct_win[1][24 + i] = FIXR(sin(M_PI * ((i + 6) + 0.5) / 12.0)); - mdct_win[1][30 + i] = FIXR(0.0); - - mdct_win[3][i] = FIXR(0.0); - mdct_win[3][6 + i] = FIXR(sin(M_PI * (i + 0.5) / 12.0)); - mdct_win[3][12 + i] = FIXR(1.0); - } - - for(i=0;i<12;i++) - mdct_win[2][i] = FIXR(sin(M_PI * (i + 0.5) / 12.0)); - - /* NOTE: we do frequency inversion adter the MDCT by changing - the sign of the right window coefs */ - for(j=0;j<4;j++) { - for(i=0;i<36;i+=2) { - mdct_win[j + 4][i] = mdct_win[j][i]; - mdct_win[j + 4][i + 1] = -mdct_win[j][i + 1]; - } - } - -#if defined(DEBUG) - for(j=0;j<8;j++) { - printf("win%d=\n", j); - for(i=0;i<36;i++) - printf("%f, ", (double)mdct_win[j][i] / FRAC_ONE); - printf("\n"); - } -#endif - init = 1; - } - - s->inbuf_index = 0; - s->inbuf = &s->inbuf1[s->inbuf_index][BACKSTEP_SIZE]; - s->inbuf_ptr = s->inbuf; -#ifdef DEBUG - s->frame_count = 0; -#endif - return 0; -} - -/* tab[i][j] = 1.0 / (2.0 * cos(pi*(2*k+1) / 2^(6 - j))) */ - -/* cos(i*pi/64) */ - -#define COS0_0 FIXR(0.50060299823519630134) -#define COS0_1 FIXR(0.50547095989754365998) -#define COS0_2 FIXR(0.51544730992262454697) -#define COS0_3 FIXR(0.53104259108978417447) -#define COS0_4 FIXR(0.55310389603444452782) -#define COS0_5 FIXR(0.58293496820613387367) -#define COS0_6 FIXR(0.62250412303566481615) -#define COS0_7 FIXR(0.67480834145500574602) -#define COS0_8 FIXR(0.74453627100229844977) -#define COS0_9 FIXR(0.83934964541552703873) -#define COS0_10 FIXR(0.97256823786196069369) -#define COS0_11 FIXR(1.16943993343288495515) -#define COS0_12 FIXR(1.48416461631416627724) -#define COS0_13 FIXR(2.05778100995341155085) -#define COS0_14 FIXR(3.40760841846871878570) -#define COS0_15 FIXR(10.19000812354805681150) - -#define COS1_0 FIXR(0.50241928618815570551) -#define COS1_1 FIXR(0.52249861493968888062) -#define COS1_2 FIXR(0.56694403481635770368) -#define COS1_3 FIXR(0.64682178335999012954) -#define COS1_4 FIXR(0.78815462345125022473) -#define COS1_5 FIXR(1.06067768599034747134) -#define COS1_6 FIXR(1.72244709823833392782) -#define COS1_7 FIXR(5.10114861868916385802) - -#define COS2_0 FIXR(0.50979557910415916894) -#define COS2_1 FIXR(0.60134488693504528054) -#define COS2_2 FIXR(0.89997622313641570463) -#define COS2_3 FIXR(2.56291544774150617881) - -#define COS3_0 FIXR(0.54119610014619698439) -#define COS3_1 FIXR(1.30656296487637652785) - -#define COS4_0 FIXR(0.70710678118654752439) - -/* butterfly operator */ -#define BF(a, b, c)\ -{\ - tmp0 = tab[a] + tab[b];\ - tmp1 = tab[a] - tab[b];\ - tab[a] = tmp0;\ - tab[b] = MULL(tmp1, c);\ -} - -#define BF1(a, b, c, d)\ -{\ - BF(a, b, COS4_0);\ - BF(c, d, -COS4_0);\ - tab[c] += tab[d];\ -} - -#define BF2(a, b, c, d)\ -{\ - BF(a, b, COS4_0);\ - BF(c, d, -COS4_0);\ - tab[c] += tab[d];\ - tab[a] += tab[c];\ - tab[c] += tab[b];\ - tab[b] += tab[d];\ -} - -#define ADD(a, b) tab[a] += tab[b] - -/* DCT32 without 1/sqrt(2) coef zero scaling. */ -static void dct32(int32_t *out, int32_t *tab) -{ - int tmp0, tmp1; - - /* pass 1 */ - BF(0, 31, COS0_0); - BF(1, 30, COS0_1); - BF(2, 29, COS0_2); - BF(3, 28, COS0_3); - BF(4, 27, COS0_4); - BF(5, 26, COS0_5); - BF(6, 25, COS0_6); - BF(7, 24, COS0_7); - BF(8, 23, COS0_8); - BF(9, 22, COS0_9); - BF(10, 21, COS0_10); - BF(11, 20, COS0_11); - BF(12, 19, COS0_12); - BF(13, 18, COS0_13); - BF(14, 17, COS0_14); - BF(15, 16, COS0_15); - - /* pass 2 */ - BF(0, 15, COS1_0); - BF(1, 14, COS1_1); - BF(2, 13, COS1_2); - BF(3, 12, COS1_3); - BF(4, 11, COS1_4); - BF(5, 10, COS1_5); - BF(6, 9, COS1_6); - BF(7, 8, COS1_7); - - BF(16, 31, -COS1_0); - BF(17, 30, -COS1_1); - BF(18, 29, -COS1_2); - BF(19, 28, -COS1_3); - BF(20, 27, -COS1_4); - BF(21, 26, -COS1_5); - BF(22, 25, -COS1_6); - BF(23, 24, -COS1_7); - - /* pass 3 */ - BF(0, 7, COS2_0); - BF(1, 6, COS2_1); - BF(2, 5, COS2_2); - BF(3, 4, COS2_3); - - BF(8, 15, -COS2_0); - BF(9, 14, -COS2_1); - BF(10, 13, -COS2_2); - BF(11, 12, -COS2_3); - - BF(16, 23, COS2_0); - BF(17, 22, COS2_1); - BF(18, 21, COS2_2); - BF(19, 20, COS2_3); - - BF(24, 31, -COS2_0); - BF(25, 30, -COS2_1); - BF(26, 29, -COS2_2); - BF(27, 28, -COS2_3); - - /* pass 4 */ - BF(0, 3, COS3_0); - BF(1, 2, COS3_1); - - BF(4, 7, -COS3_0); - BF(5, 6, -COS3_1); - - BF(8, 11, COS3_0); - BF(9, 10, COS3_1); - - BF(12, 15, -COS3_0); - BF(13, 14, -COS3_1); - - BF(16, 19, COS3_0); - BF(17, 18, COS3_1); - - BF(20, 23, -COS3_0); - BF(21, 22, -COS3_1); - - BF(24, 27, COS3_0); - BF(25, 26, COS3_1); - - BF(28, 31, -COS3_0); - BF(29, 30, -COS3_1); - - /* pass 5 */ - BF1(0, 1, 2, 3); - BF2(4, 5, 6, 7); - BF1(8, 9, 10, 11); - BF2(12, 13, 14, 15); - BF1(16, 17, 18, 19); - BF2(20, 21, 22, 23); - BF1(24, 25, 26, 27); - BF2(28, 29, 30, 31); - - /* pass 6 */ - - ADD( 8, 12); - ADD(12, 10); - ADD(10, 14); - ADD(14, 9); - ADD( 9, 13); - ADD(13, 11); - ADD(11, 15); - - out[ 0] = tab[0]; - out[16] = tab[1]; - out[ 8] = tab[2]; - out[24] = tab[3]; - out[ 4] = tab[4]; - out[20] = tab[5]; - out[12] = tab[6]; - out[28] = tab[7]; - out[ 2] = tab[8]; - out[18] = tab[9]; - out[10] = tab[10]; - out[26] = tab[11]; - out[ 6] = tab[12]; - out[22] = tab[13]; - out[14] = tab[14]; - out[30] = tab[15]; - - ADD(24, 28); - ADD(28, 26); - ADD(26, 30); - ADD(30, 25); - ADD(25, 29); - ADD(29, 27); - ADD(27, 31); - - out[ 1] = tab[16] + tab[24]; - out[17] = tab[17] + tab[25]; - out[ 9] = tab[18] + tab[26]; - out[25] = tab[19] + tab[27]; - out[ 5] = tab[20] + tab[28]; - out[21] = tab[21] + tab[29]; - out[13] = tab[22] + tab[30]; - out[29] = tab[23] + tab[31]; - out[ 3] = tab[24] + tab[20]; - out[19] = tab[25] + tab[21]; - out[11] = tab[26] + tab[22]; - out[27] = tab[27] + tab[23]; - out[ 7] = tab[28] + tab[18]; - out[23] = tab[29] + tab[19]; - out[15] = tab[30] + tab[17]; - out[31] = tab[31]; -} - -#define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15) - -#if FRAC_BITS <= 15 - -static int round_sample(int sum) -{ - int sum1; - sum1 = (sum + (1 << (OUT_SHIFT - 1))) >> OUT_SHIFT; - if (sum1 < -32768) - sum1 = -32768; - else if (sum1 > 32767) - sum1 = 32767; - return sum1; -} - -/* signed 16x16 -> 32 multiply add accumulate */ -#define MACS(rt, ra, rb) rt += (ra) * (rb) - -/* signed 16x16 -> 32 multiply */ -#define MULS(ra, rb) ((ra) * (rb)) - -#else - -static int round_sample(int64_t sum) -{ - int sum1; - sum1 = (int)((sum + ((int64_t)(1) << (OUT_SHIFT - 1))) >> OUT_SHIFT); - if (sum1 < -32768) - sum1 = -32768; - else if (sum1 > 32767) - sum1 = 32767; - return sum1; -} - -#define MULS(ra, rb) MUL64(ra, rb) - -#endif - -#define SUM8(sum, op, w, p) \ -{ \ - sum op MULS((w)[0 * 64], p[0 * 64]);\ - sum op MULS((w)[1 * 64], p[1 * 64]);\ - sum op MULS((w)[2 * 64], p[2 * 64]);\ - sum op MULS((w)[3 * 64], p[3 * 64]);\ - sum op MULS((w)[4 * 64], p[4 * 64]);\ - sum op MULS((w)[5 * 64], p[5 * 64]);\ - sum op MULS((w)[6 * 64], p[6 * 64]);\ - sum op MULS((w)[7 * 64], p[7 * 64]);\ -} - -#define SUM8P2(sum1, op1, sum2, op2, w1, w2, p) \ -{ \ - int tmp;\ - tmp = p[0 * 64];\ - sum1 op1 MULS((w1)[0 * 64], tmp);\ - sum2 op2 MULS((w2)[0 * 64], tmp);\ - tmp = p[1 * 64];\ - sum1 op1 MULS((w1)[1 * 64], tmp);\ - sum2 op2 MULS((w2)[1 * 64], tmp);\ - tmp = p[2 * 64];\ - sum1 op1 MULS((w1)[2 * 64], tmp);\ - sum2 op2 MULS((w2)[2 * 64], tmp);\ - tmp = p[3 * 64];\ - sum1 op1 MULS((w1)[3 * 64], tmp);\ - sum2 op2 MULS((w2)[3 * 64], tmp);\ - tmp = p[4 * 64];\ - sum1 op1 MULS((w1)[4 * 64], tmp);\ - sum2 op2 MULS((w2)[4 * 64], tmp);\ - tmp = p[5 * 64];\ - sum1 op1 MULS((w1)[5 * 64], tmp);\ - sum2 op2 MULS((w2)[5 * 64], tmp);\ - tmp = p[6 * 64];\ - sum1 op1 MULS((w1)[6 * 64], tmp);\ - sum2 op2 MULS((w2)[6 * 64], tmp);\ - tmp = p[7 * 64];\ - sum1 op1 MULS((w1)[7 * 64], tmp);\ - sum2 op2 MULS((w2)[7 * 64], tmp);\ -} - - -/* 32 sub band synthesis filter. Input: 32 sub band samples, Output: - 32 samples. */ -/* XXX: optimize by avoiding ring buffer usage */ -static void synth_filter(MPADecodeContext *s1, - int ch, int16_t *samples, int incr, - int32_t sb_samples[SBLIMIT]) -{ - int32_t tmp[32]; - MPA_INT *synth_buf; - const MPA_INT *w, *w2, *p; - int j, offset, v; - int16_t *samples2; -#if FRAC_BITS <= 15 - int32_t sum, sum2; -#else - int64_t sum, sum2; -#endif - - dct32(tmp, sb_samples); - - offset = s1->synth_buf_offset[ch]; - synth_buf = s1->synth_buf[ch] + offset; - - for(j=0;j<32;j++) { - v = tmp[j]; -#if FRAC_BITS <= 15 - /* NOTE: can cause a loss in precision if very high amplitude - sound */ - if (v > 32767) - v = 32767; - else if (v < -32768) - v = -32768; -#endif - synth_buf[j] = v; - } - /* copy to avoid wrap */ - memcpy(synth_buf + 512, synth_buf, 32 * sizeof(MPA_INT)); - - samples2 = samples + 31 * incr; - w = window; - w2 = window + 31; - - sum = 0; - p = synth_buf + 16; - SUM8(sum, +=, w, p); - p = synth_buf + 48; - SUM8(sum, -=, w + 32, p); - *samples = round_sample(sum); - samples += incr; - w++; - - /* we calculate two samples at the same time to avoid one memory - access per two sample */ - for(j=1;j<16;j++) { - sum = 0; - sum2 = 0; - p = synth_buf + 16 + j; - SUM8P2(sum, +=, sum2, -=, w, w2, p); - p = synth_buf + 48 - j; - SUM8P2(sum, -=, sum2, -=, w + 32, w2 + 32, p); - - *samples = round_sample(sum); - samples += incr; - *samples2 = round_sample(sum2); - samples2 -= incr; - w++; - w2--; - } - - p = synth_buf + 32; - sum = 0; - SUM8(sum, -=, w + 32, p); - *samples = round_sample(sum); - - offset = (offset - 32) & 511; - s1->synth_buf_offset[ch] = offset; -} - -/* cos(pi*i/24) */ -#define C1 FIXR(0.99144486137381041114) -#define C3 FIXR(0.92387953251128675612) -#define C5 FIXR(0.79335334029123516458) -#define C7 FIXR(0.60876142900872063941) -#define C9 FIXR(0.38268343236508977173) -#define C11 FIXR(0.13052619222005159154) - -/* 12 points IMDCT. We compute it "by hand" by factorizing obvious - cases. */ -static void imdct12(int *out, int *in) -{ - int tmp; - int64_t in1_3, in1_9, in4_3, in4_9; - - in1_3 = MUL64(in[1], C3); - in1_9 = MUL64(in[1], C9); - in4_3 = MUL64(in[4], C3); - in4_9 = MUL64(in[4], C9); - - tmp = FRAC_RND(MUL64(in[0], C7) - in1_3 - MUL64(in[2], C11) + - MUL64(in[3], C1) - in4_9 - MUL64(in[5], C5)); - out[0] = tmp; - out[5] = -tmp; - tmp = FRAC_RND(MUL64(in[0] - in[3], C9) - in1_3 + - MUL64(in[2] + in[5], C3) - in4_9); - out[1] = tmp; - out[4] = -tmp; - tmp = FRAC_RND(MUL64(in[0], C11) - in1_9 + MUL64(in[2], C7) - - MUL64(in[3], C5) + in4_3 - MUL64(in[5], C1)); - out[2] = tmp; - out[3] = -tmp; - tmp = FRAC_RND(MUL64(-in[0], C5) + in1_9 + MUL64(in[2], C1) + - MUL64(in[3], C11) - in4_3 - MUL64(in[5], C7)); - out[6] = tmp; - out[11] = tmp; - tmp = FRAC_RND(MUL64(-in[0] + in[3], C3) - in1_9 + - MUL64(in[2] + in[5], C9) + in4_3); - out[7] = tmp; - out[10] = tmp; - tmp = FRAC_RND(-MUL64(in[0], C1) - in1_3 - MUL64(in[2], C5) - - MUL64(in[3], C7) - in4_9 - MUL64(in[5], C11)); - out[8] = tmp; - out[9] = tmp; -} - -#undef C1 -#undef C3 -#undef C5 -#undef C7 -#undef C9 -#undef C11 - -/* cos(pi*i/18) */ -#define C1 FIXR(0.98480775301220805936) -#define C2 FIXR(0.93969262078590838405) -#define C3 FIXR(0.86602540378443864676) -#define C4 FIXR(0.76604444311897803520) -#define C5 FIXR(0.64278760968653932632) -#define C6 FIXR(0.5) -#define C7 FIXR(0.34202014332566873304) -#define C8 FIXR(0.17364817766693034885) - -/* 0.5 / cos(pi*(2*i+1)/36) */ -static const int icos36[9] = { - FIXR(0.50190991877167369479), - FIXR(0.51763809020504152469), - FIXR(0.55168895948124587824), - FIXR(0.61038729438072803416), - FIXR(0.70710678118654752439), - FIXR(0.87172339781054900991), - FIXR(1.18310079157624925896), - FIXR(1.93185165257813657349), - FIXR(5.73685662283492756461), -}; - -static const int icos72[18] = { - /* 0.5 / cos(pi*(2*i+19)/72) */ - FIXR(0.74009361646113053152), - FIXR(0.82133981585229078570), - FIXR(0.93057949835178895673), - FIXR(1.08284028510010010928), - FIXR(1.30656296487637652785), - FIXR(1.66275476171152078719), - FIXR(2.31011315767264929558), - FIXR(3.83064878777019433457), - FIXR(11.46279281302667383546), - - /* 0.5 / cos(pi*(2*(i + 18) +19)/72) */ - FIXR(-0.67817085245462840086), - FIXR(-0.63023620700513223342), - FIXR(-0.59284452371708034528), - FIXR(-0.56369097343317117734), - FIXR(-0.54119610014619698439), - FIXR(-0.52426456257040533932), - FIXR(-0.51213975715725461845), - FIXR(-0.50431448029007636036), - FIXR(-0.50047634258165998492), -}; - -/* using Lee like decomposition followed by hand coded 9 points DCT */ -static void imdct36(int *out, int *in) -{ - int i, j, t0, t1, t2, t3, s0, s1, s2, s3; - int tmp[18], *tmp1, *in1; - int64_t in3_3, in6_6; - - for(i=17;i>=1;i--) - in[i] += in[i-1]; - for(i=17;i>=3;i-=2) - in[i] += in[i-2]; - - for(j=0;j<2;j++) { - tmp1 = tmp + j; - in1 = in + j; - - in3_3 = MUL64(in1[2*3], C3); - in6_6 = MUL64(in1[2*6], C6); - - tmp1[0] = FRAC_RND(MUL64(in1[2*1], C1) + in3_3 + - MUL64(in1[2*5], C5) + MUL64(in1[2*7], C7)); - tmp1[2] = in1[2*0] + FRAC_RND(MUL64(in1[2*2], C2) + - MUL64(in1[2*4], C4) + in6_6 + - MUL64(in1[2*8], C8)); - tmp1[4] = FRAC_RND(MUL64(in1[2*1] - in1[2*5] - in1[2*7], C3)); - tmp1[6] = FRAC_RND(MUL64(in1[2*2] - in1[2*4] - in1[2*8], C6)) - - in1[2*6] + in1[2*0]; - tmp1[8] = FRAC_RND(MUL64(in1[2*1], C5) - in3_3 - - MUL64(in1[2*5], C7) + MUL64(in1[2*7], C1)); - tmp1[10] = in1[2*0] + FRAC_RND(MUL64(-in1[2*2], C8) - - MUL64(in1[2*4], C2) + in6_6 + - MUL64(in1[2*8], C4)); - tmp1[12] = FRAC_RND(MUL64(in1[2*1], C7) - in3_3 + - MUL64(in1[2*5], C1) - - MUL64(in1[2*7], C5)); - tmp1[14] = in1[2*0] + FRAC_RND(MUL64(-in1[2*2], C4) + - MUL64(in1[2*4], C8) + in6_6 - - MUL64(in1[2*8], C2)); - tmp1[16] = in1[2*0] - in1[2*2] + in1[2*4] - in1[2*6] + in1[2*8]; - } - - i = 0; - for(j=0;j<4;j++) { - t0 = tmp[i]; - t1 = tmp[i + 2]; - s0 = t1 + t0; - s2 = t1 - t0; - - t2 = tmp[i + 1]; - t3 = tmp[i + 3]; - s1 = MULL(t3 + t2, icos36[j]); - s3 = MULL(t3 - t2, icos36[8 - j]); - - t0 = MULL(s0 + s1, icos72[9 + 8 - j]); - t1 = MULL(s0 - s1, icos72[8 - j]); - out[18 + 9 + j] = t0; - out[18 + 8 - j] = t0; - out[9 + j] = -t1; - out[8 - j] = t1; - - t0 = MULL(s2 + s3, icos72[9+j]); - t1 = MULL(s2 - s3, icos72[j]); - out[18 + 9 + (8 - j)] = t0; - out[18 + j] = t0; - out[9 + (8 - j)] = -t1; - out[j] = t1; - i += 4; - } - - s0 = tmp[16]; - s1 = MULL(tmp[17], icos36[4]); - t0 = MULL(s0 + s1, icos72[9 + 4]); - t1 = MULL(s0 - s1, icos72[4]); - out[18 + 9 + 4] = t0; - out[18 + 8 - 4] = t0; - out[9 + 4] = -t1; - out[8 - 4] = t1; -} - -/* fast header check for resync */ -static int check_header(uint32_t header) -{ - /* header */ - if ((header & 0xffe00000) != 0xffe00000) - return -1; - /* layer check */ - if (((header >> 17) & 3) == 0) - return -1; - /* bit rate */ - if (((header >> 12) & 0xf) == 0xf) - return -1; - /* frequency */ - if (((header >> 10) & 3) == 3) - return -1; - return 0; -} - -/* header + layer + bitrate + freq + lsf/mpeg25 */ -#define SAME_HEADER_MASK \ - (0xffe00000 | (3 << 17) | (0xf << 12) | (3 << 10) | (3 << 19)) - -/* header decoding. MUST check the header before because no - consistency check is done there. Return 1 if free format found and - that the frame size must be computed externally */ -static int decode_header(MPADecodeContext *s, uint32_t header) -{ - int sample_rate, frame_size, mpeg25, padding; - int sample_rate_index, bitrate_index; - if (header & (1<<20)) { - s->lsf = (header & (1<<19)) ? 0 : 1; - mpeg25 = 0; - } else { - s->lsf = 1; - mpeg25 = 1; - } - - s->layer = 4 - ((header >> 17) & 3); - /* extract frequency */ - sample_rate_index = (header >> 10) & 3; - sample_rate = mpa_freq_tab[sample_rate_index] >> (s->lsf + mpeg25); - sample_rate_index += 3 * (s->lsf + mpeg25); - s->sample_rate_index = sample_rate_index; - s->error_protection = ((header >> 16) & 1) ^ 1; - s->sample_rate = sample_rate; - - bitrate_index = (header >> 12) & 0xf; - padding = (header >> 9) & 1; - s->mode = (header >> 6) & 3; - s->mode_ext = (header >> 4) & 3; - - if (s->mode == MPA_MONO) - s->nb_channels = 1; - else - s->nb_channels = 2; - - if (bitrate_index != 0) { - frame_size = mpa_bitrate_tab[s->lsf][s->layer - 1][bitrate_index]; - s->bit_rate = frame_size * 1000; - switch(s->layer) { - case 1: - frame_size = (frame_size * 12000) / sample_rate; - frame_size = (frame_size + padding) * 4; - break; - case 2: - frame_size = (frame_size * 144000) / sample_rate; - frame_size += padding; - break; - default: - case 3: - frame_size = (frame_size * 144000) / (sample_rate << s->lsf); - frame_size += padding; - break; - } - s->frame_size = frame_size; - } else { - /* if no frame size computed, signal it */ - if (!s->free_format_frame_size) - return 1; - /* free format: compute bitrate and real frame size from the - frame size we extracted by reading the bitstream */ - s->frame_size = s->free_format_frame_size; - switch(s->layer) { - case 1: - s->frame_size += padding * 4; - s->bit_rate = (s->frame_size * sample_rate) / 48000; - break; - case 2: - s->frame_size += padding; - s->bit_rate = (s->frame_size * sample_rate) / 144000; - break; - default: - case 3: - s->frame_size += padding; - s->bit_rate = (s->frame_size * (sample_rate << s->lsf)) / 144000; - break; - } - } - -#if defined(DEBUG) - printf("layer%d, %d Hz, %d kbits/s, ", - s->layer, s->sample_rate, s->bit_rate); - if (s->nb_channels == 2) { - if (s->layer == 3) { - if (s->mode_ext & MODE_EXT_MS_STEREO) - printf("ms-"); - if (s->mode_ext & MODE_EXT_I_STEREO) - printf("i-"); - } - printf("stereo"); - } else { - printf("mono"); - } - printf("\n"); -#endif - return 0; -} - -/* return the number of decoded frames */ -static int mp_decode_layer1(MPADecodeContext *s) -{ - int bound, i, v, n, ch, j, mant; - uint8_t allocation[MPA_MAX_CHANNELS][SBLIMIT]; - uint8_t scale_factors[MPA_MAX_CHANNELS][SBLIMIT]; - - if (s->mode == MPA_JSTEREO) - bound = (s->mode_ext + 1) * 4; - else - bound = SBLIMIT; - - /* allocation bits */ - for(i=0;inb_channels;ch++) { - allocation[ch][i] = get_bits(&s->gb, 4); - } - } - for(i=bound;igb, 4); - } - - /* scale factors */ - for(i=0;inb_channels;ch++) { - if (allocation[ch][i]) - scale_factors[ch][i] = get_bits(&s->gb, 6); - } - } - for(i=bound;igb, 6); - scale_factors[1][i] = get_bits(&s->gb, 6); - } - } - - /* compute samples */ - for(j=0;j<12;j++) { - for(i=0;inb_channels;ch++) { - n = allocation[ch][i]; - if (n) { - mant = get_bits(&s->gb, n + 1); - v = l1_unscale(n, mant, scale_factors[ch][i]); - } else { - v = 0; - } - s->sb_samples[ch][j][i] = v; - } - } - for(i=bound;igb, n + 1); - v = l1_unscale(n, mant, scale_factors[0][i]); - s->sb_samples[0][j][i] = v; - v = l1_unscale(n, mant, scale_factors[1][i]); - s->sb_samples[1][j][i] = v; - } else { - s->sb_samples[0][j][i] = 0; - s->sb_samples[1][j][i] = 0; - } - } - } - return 12; -} - -/* bitrate is in kb/s */ -static int l2_select_table(int bitrate, int nb_channels, int freq, int lsf) -{ - int ch_bitrate, table; - - ch_bitrate = bitrate / nb_channels; - if (!lsf) { - if ((freq == 48000 && ch_bitrate >= 56) || - (ch_bitrate >= 56 && ch_bitrate <= 80)) - table = 0; - else if (freq != 48000 && ch_bitrate >= 96) - table = 1; - else if (freq != 32000 && ch_bitrate <= 48) - table = 2; - else - table = 3; - } else { - table = 4; - } - return table; -} - -static int mp_decode_layer2(MPADecodeContext *s) -{ - int sblimit; /* number of used subbands */ - const unsigned char *alloc_table; - int table, bit_alloc_bits, i, j, ch, bound, v; - unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT]; - unsigned char scale_code[MPA_MAX_CHANNELS][SBLIMIT]; - unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3], *sf; - int scale, qindex, bits, steps, k, l, m, b; - - /* select decoding table */ - table = l2_select_table(s->bit_rate / 1000, s->nb_channels, - s->sample_rate, s->lsf); - sblimit = sblimit_table[table]; - alloc_table = alloc_tables[table]; - - if (s->mode == MPA_JSTEREO) - bound = (s->mode_ext + 1) * 4; - else - bound = sblimit; - -#ifdef DEBUG - printf("bound=%d sblimit=%d\n", bound, sblimit); -#endif - /* parse bit allocation */ - j = 0; - for(i=0;inb_channels;ch++) { - bit_alloc[ch][i] = get_bits(&s->gb, bit_alloc_bits); - } - j += 1 << bit_alloc_bits; - } - for(i=bound;igb, bit_alloc_bits); - bit_alloc[0][i] = v; - bit_alloc[1][i] = v; - j += 1 << bit_alloc_bits; - } - -#ifdef DEBUG - { - for(ch=0;chnb_channels;ch++) { - for(i=0;inb_channels;ch++) { - if (bit_alloc[ch][i]) - scale_code[ch][i] = get_bits(&s->gb, 2); - } - } - - /* scale factors */ - for(i=0;inb_channels;ch++) { - if (bit_alloc[ch][i]) { - sf = scale_factors[ch][i]; - switch(scale_code[ch][i]) { - default: - case 0: - sf[0] = get_bits(&s->gb, 6); - sf[1] = get_bits(&s->gb, 6); - sf[2] = get_bits(&s->gb, 6); - break; - case 2: - sf[0] = get_bits(&s->gb, 6); - sf[1] = sf[0]; - sf[2] = sf[0]; - break; - case 1: - sf[0] = get_bits(&s->gb, 6); - sf[2] = get_bits(&s->gb, 6); - sf[1] = sf[0]; - break; - case 3: - sf[0] = get_bits(&s->gb, 6); - sf[2] = get_bits(&s->gb, 6); - sf[1] = sf[2]; - break; - } - } - } - } - -#ifdef DEBUG - for(ch=0;chnb_channels;ch++) { - for(i=0;inb_channels;ch++) { - b = bit_alloc[ch][i]; - if (b) { - scale = scale_factors[ch][i][k]; - qindex = alloc_table[j+b]; - bits = quant_bits[qindex]; - if (bits < 0) { - /* 3 values at the same time */ - v = get_bits(&s->gb, -bits); - steps = quant_steps[qindex]; - s->sb_samples[ch][k * 12 + l + 0][i] = - l2_unscale_group(steps, v % steps, scale); - v = v / steps; - s->sb_samples[ch][k * 12 + l + 1][i] = - l2_unscale_group(steps, v % steps, scale); - v = v / steps; - s->sb_samples[ch][k * 12 + l + 2][i] = - l2_unscale_group(steps, v, scale); - } else { - for(m=0;m<3;m++) { - v = get_bits(&s->gb, bits); - v = l1_unscale(bits - 1, v, scale); - s->sb_samples[ch][k * 12 + l + m][i] = v; - } - } - } else { - s->sb_samples[ch][k * 12 + l + 0][i] = 0; - s->sb_samples[ch][k * 12 + l + 1][i] = 0; - s->sb_samples[ch][k * 12 + l + 2][i] = 0; - } - } - /* next subband in alloc table */ - j += 1 << bit_alloc_bits; - } - /* XXX: find a way to avoid this duplication of code */ - for(i=bound;igb, -bits); - steps = quant_steps[qindex]; - mant = v % steps; - v = v / steps; - s->sb_samples[0][k * 12 + l + 0][i] = - l2_unscale_group(steps, mant, scale0); - s->sb_samples[1][k * 12 + l + 0][i] = - l2_unscale_group(steps, mant, scale1); - mant = v % steps; - v = v / steps; - s->sb_samples[0][k * 12 + l + 1][i] = - l2_unscale_group(steps, mant, scale0); - s->sb_samples[1][k * 12 + l + 1][i] = - l2_unscale_group(steps, mant, scale1); - s->sb_samples[0][k * 12 + l + 2][i] = - l2_unscale_group(steps, v, scale0); - s->sb_samples[1][k * 12 + l + 2][i] = - l2_unscale_group(steps, v, scale1); - } else { - for(m=0;m<3;m++) { - mant = get_bits(&s->gb, bits); - s->sb_samples[0][k * 12 + l + m][i] = - l1_unscale(bits - 1, mant, scale0); - s->sb_samples[1][k * 12 + l + m][i] = - l1_unscale(bits - 1, mant, scale1); - } - } - } else { - s->sb_samples[0][k * 12 + l + 0][i] = 0; - s->sb_samples[0][k * 12 + l + 1][i] = 0; - s->sb_samples[0][k * 12 + l + 2][i] = 0; - s->sb_samples[1][k * 12 + l + 0][i] = 0; - s->sb_samples[1][k * 12 + l + 1][i] = 0; - s->sb_samples[1][k * 12 + l + 2][i] = 0; - } - /* next subband in alloc table */ - j += 1 << bit_alloc_bits; - } - /* fill remaining samples to zero */ - for(i=sblimit;inb_channels;ch++) { - s->sb_samples[ch][k * 12 + l + 0][i] = 0; - s->sb_samples[ch][k * 12 + l + 1][i] = 0; - s->sb_samples[ch][k * 12 + l + 2][i] = 0; - } - } - } - } - return 3 * 12; -} - -/* - * Seek back in the stream for backstep bytes (at most 511 bytes) - */ -static void seek_to_maindata(MPADecodeContext *s, unsigned int backstep) -{ - uint8_t *ptr; - - /* compute current position in stream */ - ptr = (uint8_t *)(s->gb.buffer + (get_bits_count(&s->gb)>>3)); - - /* copy old data before current one */ - ptr -= backstep; - memcpy(ptr, s->inbuf1[s->inbuf_index ^ 1] + - BACKSTEP_SIZE + s->old_frame_size - backstep, backstep); - /* init get bits again */ - init_get_bits(&s->gb, ptr, (s->frame_size + backstep)*8); - - /* prepare next buffer */ - s->inbuf_index ^= 1; - s->inbuf = &s->inbuf1[s->inbuf_index][BACKSTEP_SIZE]; - s->old_frame_size = s->frame_size; -} - -static void lsf_sf_expand(int *slen, - int sf, int n1, int n2, int n3) -{ - if (n3) { - slen[3] = sf % n3; - sf /= n3; - } else { - slen[3] = 0; - } - if (n2) { - slen[2] = sf % n2; - sf /= n2; - } else { - slen[2] = 0; - } - slen[1] = sf % n1; - sf /= n1; - slen[0] = sf; -} - -static void exponents_from_scale_factors(MPADecodeContext *s, - GranuleDef *g, - int16_t *exponents) -{ - const uint8_t *bstab, *pretab; - int len, i, j, k, l, v0, shift, gain, gains[3]; - int16_t *exp_ptr; - - exp_ptr = exponents; - gain = g->global_gain - 210; - shift = g->scalefac_scale + 1; - - bstab = band_size_long[s->sample_rate_index]; - pretab = mpa_pretab[g->preflag]; - for(i=0;ilong_end;i++) { - v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift); - len = bstab[i]; - for(j=len;j>0;j--) - *exp_ptr++ = v0; - } - - if (g->short_start < 13) { - bstab = band_size_short[s->sample_rate_index]; - gains[0] = gain - (g->subblock_gain[0] << 3); - gains[1] = gain - (g->subblock_gain[1] << 3); - gains[2] = gain - (g->subblock_gain[2] << 3); - k = g->long_end; - for(i=g->short_start;i<13;i++) { - len = bstab[i]; - for(l=0;l<3;l++) { - v0 = gains[l] - (g->scale_factors[k++] << shift); - for(j=len;j>0;j--) - *exp_ptr++ = v0; - } - } - } -} - -/* handle n = 0 too */ -static int get_bitsz(GetBitContext *s, int n) -{ - if (n == 0) - return 0; - else - return get_bits(s, n); -} - -static int huffman_decode(MPADecodeContext *s, GranuleDef *g, - int16_t *exponents, int end_pos) -{ - int s_index; - int linbits, code, x, y, l, v, i, j, k, pos; - GetBitContext last_gb; - VLC *vlc; - uint8_t *code_table; - - /* low frequencies (called big values) */ - s_index = 0; - for(i=0;i<3;i++) { - j = g->region_size[i]; - if (j == 0) - continue; - /* select vlc table */ - k = g->table_select[i]; - l = mpa_huff_data[k][0]; - linbits = mpa_huff_data[k][1]; - vlc = &huff_vlc[l]; - code_table = huff_code_table[l]; - - /* read huffcode and compute each couple */ - for(;j>0;j--) { - if (get_bits_count(&s->gb) >= end_pos) - break; - if (code_table) { - code = get_vlc(&s->gb, vlc); - if (code < 0) - return -1; - y = code_table[code]; - x = y >> 4; - y = y & 0x0f; - } else { - x = 0; - y = 0; - } -#ifdef DEBUG - printf("region=%d n=%d x=%d y=%d exp=%d\n", - i, g->region_size[i] - j, x, y, exponents[s_index]); -#endif - if (x) { - if (x == 15) - x += get_bitsz(&s->gb, linbits); - v = l3_unscale(x, exponents[s_index]); - if (get_bits(&s->gb, 1)) - v = -v; - } else { - v = 0; - } - g->sb_hybrid[s_index++] = v; - if (y) { - if (y == 15) - y += get_bitsz(&s->gb, linbits); - v = l3_unscale(y, exponents[s_index]); - if (get_bits(&s->gb, 1)) - v = -v; - } else { - v = 0; - } - g->sb_hybrid[s_index++] = v; - } - } - - /* high frequencies */ - vlc = &huff_quad_vlc[g->count1table_select]; - last_gb.buffer = NULL; - while (s_index <= 572) { - pos = get_bits_count(&s->gb); - if (pos >= end_pos) { - if (pos > end_pos && last_gb.buffer != NULL) { - /* some encoders generate an incorrect size for this - part. We must go back into the data */ - s_index -= 4; - s->gb = last_gb; - } - break; - } - last_gb= s->gb; - - code = get_vlc(&s->gb, vlc); -#ifdef DEBUG - printf("t=%d code=%d\n", g->count1table_select, code); -#endif - if (code < 0) - return -1; - for(i=0;i<4;i++) { - if (code & (8 >> i)) { - /* non zero value. Could use a hand coded function for - 'one' value */ - v = l3_unscale(1, exponents[s_index]); - if(get_bits(&s->gb, 1)) - v = -v; - } else { - v = 0; - } - g->sb_hybrid[s_index++] = v; - } - } - while (s_index < 576) - g->sb_hybrid[s_index++] = 0; - return 0; -} - -/* Reorder short blocks from bitstream order to interleaved order. It - would be faster to do it in parsing, but the code would be far more - complicated */ -static void reorder_block(MPADecodeContext *s, GranuleDef *g) -{ - int i, j, k, len; - int32_t *ptr, *dst, *ptr1; - int32_t tmp[576]; - - if (g->block_type != 2) - return; - - if (g->switch_point) { - if (s->sample_rate_index != 8) { - ptr = g->sb_hybrid + 36; - } else { - ptr = g->sb_hybrid + 48; - } - } else { - ptr = g->sb_hybrid; - } - - for(i=g->short_start;i<13;i++) { - len = band_size_short[s->sample_rate_index][i]; - ptr1 = ptr; - for(k=0;k<3;k++) { - dst = tmp + k; - for(j=len;j>0;j--) { - *dst = *ptr++; - dst += 3; - } - } - memcpy(ptr1, tmp, len * 3 * sizeof(int32_t)); - } -} - -#define ISQRT2 FIXR(0.70710678118654752440) - -static void compute_stereo(MPADecodeContext *s, - GranuleDef *g0, GranuleDef *g1) -{ - int i, j, k, l; - int32_t v1, v2; - int sf_max, tmp0, tmp1, sf, len, non_zero_found; - int32_t (*is_tab)[16]; - int32_t *tab0, *tab1; - int non_zero_found_short[3]; - - /* intensity stereo */ - if (s->mode_ext & MODE_EXT_I_STEREO) { - if (!s->lsf) { - is_tab = is_table; - sf_max = 7; - } else { - is_tab = is_table_lsf[g1->scalefac_compress & 1]; - sf_max = 16; - } - - tab0 = g0->sb_hybrid + 576; - tab1 = g1->sb_hybrid + 576; - - non_zero_found_short[0] = 0; - non_zero_found_short[1] = 0; - non_zero_found_short[2] = 0; - k = (13 - g1->short_start) * 3 + g1->long_end - 3; - for(i = 12;i >= g1->short_start;i--) { - /* for last band, use previous scale factor */ - if (i != 11) - k -= 3; - len = band_size_short[s->sample_rate_index][i]; - for(l=2;l>=0;l--) { - tab0 -= len; - tab1 -= len; - if (!non_zero_found_short[l]) { - /* test if non zero band. if so, stop doing i-stereo */ - for(j=0;jscale_factors[k + l]; - if (sf >= sf_max) - goto found1; - - v1 = is_tab[0][sf]; - v2 = is_tab[1][sf]; - for(j=0;jmode_ext & MODE_EXT_MS_STEREO) { - /* lower part of the spectrum : do ms stereo - if enabled */ - for(j=0;jlong_end - 1;i >= 0;i--) { - len = band_size_long[s->sample_rate_index][i]; - tab0 -= len; - tab1 -= len; - /* test if non zero band. if so, stop doing i-stereo */ - if (!non_zero_found) { - for(j=0;jscale_factors[k]; - if (sf >= sf_max) - goto found2; - v1 = is_tab[0][sf]; - v2 = is_tab[1][sf]; - for(j=0;jmode_ext & MODE_EXT_MS_STEREO) { - /* lower part of the spectrum : do ms stereo - if enabled */ - for(j=0;jmode_ext & MODE_EXT_MS_STEREO) { - /* ms stereo ONLY */ - /* NOTE: the 1/sqrt(2) normalization factor is included in the - global gain */ - tab0 = g0->sb_hybrid; - tab1 = g1->sb_hybrid; - for(i=0;i<576;i++) { - tmp0 = tab0[i]; - tmp1 = tab1[i]; - tab0[i] = tmp0 + tmp1; - tab1[i] = tmp0 - tmp1; - } - } -} - -static void compute_antialias(MPADecodeContext *s, - GranuleDef *g) -{ - int32_t *ptr, *p0, *p1, *csa; - int n, tmp0, tmp1, i, j; - - /* we antialias only "long" bands */ - if (g->block_type == 2) { - if (!g->switch_point) - return; - /* XXX: check this for 8000Hz case */ - n = 1; - } else { - n = SBLIMIT - 1; - } - - ptr = g->sb_hybrid + 18; - for(i = n;i > 0;i--) { - p0 = ptr - 1; - p1 = ptr; - csa = &csa_table[0][0]; - for(j=0;j<8;j++) { - tmp0 = *p0; - tmp1 = *p1; - *p0 = FRAC_RND(MUL64(tmp0, csa[0]) - MUL64(tmp1, csa[1])); - *p1 = FRAC_RND(MUL64(tmp0, csa[1]) + MUL64(tmp1, csa[0])); - p0--; - p1++; - csa += 2; - } - ptr += 18; - } -} - -static void compute_imdct(MPADecodeContext *s, - GranuleDef *g, - int32_t *sb_samples, - int32_t *mdct_buf) -{ - int32_t *ptr, *win, *win1, *buf, *buf2, *out_ptr, *ptr1; - int32_t in[6]; - int32_t out[36]; - int32_t out2[12]; - int i, j, k, mdct_long_end, v, sblimit; - - /* find last non zero block */ - ptr = g->sb_hybrid + 576; - ptr1 = g->sb_hybrid + 2 * 18; - while (ptr >= ptr1) { - ptr -= 6; - v = ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5]; - if (v != 0) - break; - } - sblimit = ((ptr - g->sb_hybrid) / 18) + 1; - - if (g->block_type == 2) { - /* XXX: check for 8000 Hz */ - if (g->switch_point) - mdct_long_end = 2; - else - mdct_long_end = 0; - } else { - mdct_long_end = sblimit; - } - - buf = mdct_buf; - ptr = g->sb_hybrid; - for(j=0;jswitch_point && j < 2) - win1 = mdct_win[0]; - else - win1 = mdct_win[g->block_type]; - /* select frequency inversion */ - win = win1 + ((4 * 36) & -(j & 1)); - for(i=0;i<18;i++) { - *out_ptr = MULL(out[i], win[i]) + buf[i]; - buf[i] = MULL(out[i + 18], win[i + 18]); - out_ptr += SBLIMIT; - } - ptr += 18; - buf += 18; - } - for(j=mdct_long_end;jlsf) { - main_data_begin = get_bits(&s->gb, 8); - if (s->nb_channels == 2) - private_bits = get_bits(&s->gb, 2); - else - private_bits = get_bits(&s->gb, 1); - nb_granules = 1; - } else { - main_data_begin = get_bits(&s->gb, 9); - if (s->nb_channels == 2) - private_bits = get_bits(&s->gb, 3); - else - private_bits = get_bits(&s->gb, 5); - nb_granules = 2; - for(ch=0;chnb_channels;ch++) { - granules[ch][0].scfsi = 0; /* all scale factors are transmitted */ - granules[ch][1].scfsi = get_bits(&s->gb, 4); - } - } - - for(gr=0;grnb_channels;ch++) { -#ifdef DEBUG - printf("gr=%d ch=%d: side_info\n", gr, ch); -#endif - g = &granules[ch][gr]; - g->part2_3_length = get_bits(&s->gb, 12); - g->big_values = get_bits(&s->gb, 9); - g->global_gain = get_bits(&s->gb, 8); - /* if MS stereo only is selected, we precompute the - 1/sqrt(2) renormalization factor */ - if ((s->mode_ext & (MODE_EXT_MS_STEREO | MODE_EXT_I_STEREO)) == - MODE_EXT_MS_STEREO) - g->global_gain -= 2; - if (s->lsf) - g->scalefac_compress = get_bits(&s->gb, 9); - else - g->scalefac_compress = get_bits(&s->gb, 4); - blocksplit_flag = get_bits(&s->gb, 1); - if (blocksplit_flag) { - g->block_type = get_bits(&s->gb, 2); - if (g->block_type == 0) - return -1; - g->switch_point = get_bits(&s->gb, 1); - for(i=0;i<2;i++) - g->table_select[i] = get_bits(&s->gb, 5); - for(i=0;i<3;i++) - g->subblock_gain[i] = get_bits(&s->gb, 3); - /* compute huffman coded region sizes */ - if (g->block_type == 2) - g->region_size[0] = (36 / 2); - else { - if (s->sample_rate_index <= 2) - g->region_size[0] = (36 / 2); - else if (s->sample_rate_index != 8) - g->region_size[0] = (54 / 2); - else - g->region_size[0] = (108 / 2); - } - g->region_size[1] = (576 / 2); - } else { - int region_address1, region_address2, l; - g->block_type = 0; - g->switch_point = 0; - for(i=0;i<3;i++) - g->table_select[i] = get_bits(&s->gb, 5); - /* compute huffman coded region sizes */ - region_address1 = get_bits(&s->gb, 4); - region_address2 = get_bits(&s->gb, 3); -#ifdef DEBUG - printf("region1=%d region2=%d\n", - region_address1, region_address2); -#endif - g->region_size[0] = - band_index_long[s->sample_rate_index][region_address1 + 1] >> 1; - l = region_address1 + region_address2 + 2; - /* should not overflow */ - if (l > 22) - l = 22; - g->region_size[1] = - band_index_long[s->sample_rate_index][l] >> 1; - } - /* convert region offsets to region sizes and truncate - size to big_values */ - g->region_size[2] = (576 / 2); - j = 0; - for(i=0;i<3;i++) { - k = g->region_size[i]; - if (k > g->big_values) - k = g->big_values; - g->region_size[i] = k - j; - j = k; - } - - /* compute band indexes */ - if (g->block_type == 2) { - if (g->switch_point) { - /* if switched mode, we handle the 36 first samples as - long blocks. For 8000Hz, we handle the 48 first - exponents as long blocks (XXX: check this!) */ - if (s->sample_rate_index <= 2) - g->long_end = 8; - else if (s->sample_rate_index != 8) - g->long_end = 6; - else - g->long_end = 4; /* 8000 Hz */ - - if (s->sample_rate_index != 8) - g->short_start = 3; - else - g->short_start = 2; - } else { - g->long_end = 0; - g->short_start = 0; - } - } else { - g->short_start = 13; - g->long_end = 22; - } - - g->preflag = 0; - if (!s->lsf) - g->preflag = get_bits(&s->gb, 1); - g->scalefac_scale = get_bits(&s->gb, 1); - g->count1table_select = get_bits(&s->gb, 1); -#ifdef DEBUG - printf("block_type=%d switch_point=%d\n", - g->block_type, g->switch_point); -#endif - } - } - - /* now we get bits from the main_data_begin offset */ -#ifdef DEBUG - printf("seekback: %d\n", main_data_begin); -#endif - seek_to_maindata(s, main_data_begin); - - for(gr=0;grnb_channels;ch++) { - g = &granules[ch][gr]; - - bits_pos = get_bits_count(&s->gb); - - if (!s->lsf) { - uint8_t *sc; - int slen, slen1, slen2; - - /* MPEG1 scale factors */ - slen1 = slen_table[0][g->scalefac_compress]; - slen2 = slen_table[1][g->scalefac_compress]; -#ifdef DEBUG - printf("slen1=%d slen2=%d\n", slen1, slen2); -#endif - if (g->block_type == 2) { - n = g->switch_point ? 17 : 18; - j = 0; - for(i=0;iscale_factors[j++] = get_bitsz(&s->gb, slen1); - for(i=0;i<18;i++) - g->scale_factors[j++] = get_bitsz(&s->gb, slen2); - for(i=0;i<3;i++) - g->scale_factors[j++] = 0; - } else { - sc = granules[ch][0].scale_factors; - j = 0; - for(k=0;k<4;k++) { - n = (k == 0 ? 6 : 5); - if ((g->scfsi & (0x8 >> k)) == 0) { - slen = (k < 2) ? slen1 : slen2; - for(i=0;iscale_factors[j++] = get_bitsz(&s->gb, slen); - } else { - /* simply copy from last granule */ - for(i=0;iscale_factors[j] = sc[j]; - j++; - } - } - } - g->scale_factors[j++] = 0; - } -#if defined(DEBUG) - { - printf("scfsi=%x gr=%d ch=%d scale_factors:\n", - g->scfsi, gr, ch); - for(i=0;iscale_factors[i]); - printf("\n"); - } -#endif - } else { - int tindex, tindex2, slen[4], sl, sf; - - /* LSF scale factors */ - if (g->block_type == 2) { - tindex = g->switch_point ? 2 : 1; - } else { - tindex = 0; - } - sf = g->scalefac_compress; - if ((s->mode_ext & MODE_EXT_I_STEREO) && ch == 1) { - /* intensity stereo case */ - sf >>= 1; - if (sf < 180) { - lsf_sf_expand(slen, sf, 6, 6, 0); - tindex2 = 3; - } else if (sf < 244) { - lsf_sf_expand(slen, sf - 180, 4, 4, 0); - tindex2 = 4; - } else { - lsf_sf_expand(slen, sf - 244, 3, 0, 0); - tindex2 = 5; - } - } else { - /* normal case */ - if (sf < 400) { - lsf_sf_expand(slen, sf, 5, 4, 4); - tindex2 = 0; - } else if (sf < 500) { - lsf_sf_expand(slen, sf - 400, 5, 4, 0); - tindex2 = 1; - } else { - lsf_sf_expand(slen, sf - 500, 3, 0, 0); - tindex2 = 2; - g->preflag = 1; - } - } - - j = 0; - for(k=0;k<4;k++) { - n = lsf_nsf_table[tindex2][tindex][k]; - sl = slen[k]; - for(i=0;iscale_factors[j++] = get_bitsz(&s->gb, sl); - } - /* XXX: should compute exact size */ - for(;j<40;j++) - g->scale_factors[j] = 0; -#if defined(DEBUG) - { - printf("gr=%d ch=%d scale_factors:\n", - gr, ch); - for(i=0;i<40;i++) - printf(" %d", g->scale_factors[i]); - printf("\n"); - } -#endif - } - - exponents_from_scale_factors(s, g, exponents); - - /* read Huffman coded residue */ - if (huffman_decode(s, g, exponents, - bits_pos + g->part2_3_length) < 0) - return -1; - - /* skip extension bits */ - bits_left = g->part2_3_length - (get_bits_count(&s->gb) - bits_pos); - if (bits_left < 0) { -#ifdef DEBUG - printf("bits_left=%d\n", bits_left); -#endif - return -1; - } - while (bits_left >= 16) { - skip_bits(&s->gb, 16); - bits_left -= 16; - } - if (bits_left > 0) - skip_bits(&s->gb, bits_left); - } /* ch */ - - if (s->nb_channels == 2) - compute_stereo(s, &granules[0][gr], &granules[1][gr]); - - for(ch=0;chnb_channels;ch++) { - g = &granules[ch][gr]; - - reorder_block(s, g); - compute_antialias(s, g); - compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]); - } - } /* gr */ - return nb_granules * 18; -} - -static int mp_decode_frame(MPADecodeContext *s, - int16_t *samples) -{ - int i, nb_frames, ch; - int16_t *samples_ptr; - - init_get_bits(&s->gb, s->inbuf + HEADER_SIZE, - (s->inbuf_ptr - s->inbuf - HEADER_SIZE)*8); - - /* skip error protection field */ - if (s->error_protection) - get_bits(&s->gb, 16); - -#ifdef DEBUG - printf("frame %d:\n", s->frame_count); -#endif - switch(s->layer) { - case 1: - nb_frames = mp_decode_layer1(s); - break; - case 2: - nb_frames = mp_decode_layer2(s); - break; - case 3: - default: - nb_frames = mp_decode_layer3(s); - break; - } -#if defined(DEBUG) - for(i=0;inb_channels;ch++) { - int j; - printf("%d-%d:", i, ch); - for(j=0;jsb_samples[ch][i][j] / FRAC_ONE); - printf("\n"); - } - } -#endif - /* apply the synthesis filter */ - for(ch=0;chnb_channels;ch++) { - samples_ptr = samples + ch; - for(i=0;inb_channels, - s->sb_samples[ch][i]); - samples_ptr += 32 * s->nb_channels; - } - } -#ifdef DEBUG - s->frame_count++; -#endif - return nb_frames * 32 * sizeof(short) * s->nb_channels; -} - -int mpaudec_decode_frame(MPAuDecContext * mpctx, - void *data, int *data_size, - const uint8_t * buf, int buf_size) -{ - MPADecodeContext *s; - const uint8_t *buf_ptr = buf; - int out_size = 0; - int16_t *out_samples = data; - assert(mpctx != NULL); - assert(mpctx->priv_data != NULL); - s = mpctx->priv_data; - - while (buf_size > 0 && out_size == 0) { - uint32_t header; - uint32_t free_format_next_header = 0; - int len = s->inbuf_ptr - s->inbuf; - if (s->frame_size == 0) { - /* no header seen : find one. We need at least HEADER_SIZE - bytes to parse it */ - len = HEADER_SIZE - len; - if (len > buf_size) - len = buf_size; - if (len > 0) { - memcpy(s->inbuf_ptr, buf_ptr, len); - buf_ptr += len; - buf_size -= len; - s->inbuf_ptr += len; - } - if ((s->inbuf_ptr - s->inbuf) >= HEADER_SIZE) { - header = (s->inbuf[0] << 24) | (s->inbuf[1] << 16) | - (s->inbuf[2] << 8) | s->inbuf[3]; - - if (check_header(header) < 0) { - /* no sync found : move by one byte (inefficient, but simple!) */ - memmove(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf - 1); - s->inbuf_ptr--; -#ifdef DEBUG - printf("skip %x\n", header); -#endif - /* reset free format frame size to give a chance - to get a new bitrate */ - s->free_format_frame_size = 0; - } else { - if (decode_header(s, header) == 1) { - /* free format: prepare to compute frame size */ - s->frame_size = -1; - } - /* update codec info */ - mpctx->sample_rate = s->sample_rate; - mpctx->channels = s->nb_channels; - mpctx->bit_rate = s->bit_rate; - mpctx->layer = s->layer; - switch(s->layer) { - case 1: - mpctx->frame_size = 384; - break; - case 2: - mpctx->frame_size = 1152; - break; - case 3: - if (s->lsf) - mpctx->frame_size = 576; - else - mpctx->frame_size = 1152; - break; - } - } - } - } else if (s->frame_size == -1) { - /* free format : find next sync to compute frame size */ - len = MPA_MAX_CODED_FRAME_SIZE - len; - if (len > buf_size) - len = buf_size; - if (len == 0) { - /* frame too long: resync */ - s->frame_size = 0; - memmove(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf - 1); - s->inbuf_ptr--; - } else { - uint8_t *p, *pend; - uint32_t header1; - int padding; - - memcpy(s->inbuf_ptr, buf_ptr, len); - /* check for header */ - p = s->inbuf_ptr - 3; - pend = s->inbuf_ptr + len - 4; - while (p <= pend && free_format_next_header == 0) { - header = (p[0] << 24) | (p[1] << 16) | - (p[2] << 8) | p[3]; - header1 = (s->inbuf[0] << 24) | (s->inbuf[1] << 16) | - (s->inbuf[2] << 8) | s->inbuf[3]; - /* check with high probability that we have a - valid header */ - if ((header & SAME_HEADER_MASK) == - (header1 & SAME_HEADER_MASK)) { - /* header found: update pointers */ - len = (p + 4) - s->inbuf_ptr; - buf_ptr += len; - buf_size -= len; - s->inbuf_ptr = p; - free_format_next_header = header; - /* compute frame size */ - s->free_format_frame_size = s->inbuf_ptr - s->inbuf; - padding = (header1 >> 9) & 1; - if (s->layer == 1) - s->free_format_frame_size -= padding * 4; - else - s->free_format_frame_size -= padding; -#ifdef DEBUG - printf("free frame size=%d padding=%d\n", - s->free_format_frame_size, padding); -#endif - decode_header(s, header1); - } else - p++; - } - if (free_format_next_header == 0) { - /* not found: simply increase pointers */ - buf_ptr += len; - s->inbuf_ptr += len; - buf_size -= len; - } - } - } else if (len < s->frame_size) { - if (s->frame_size > MPA_MAX_CODED_FRAME_SIZE) - s->frame_size = MPA_MAX_CODED_FRAME_SIZE; - len = s->frame_size - len; - if (len > buf_size) - len = buf_size; - memcpy(s->inbuf_ptr, buf_ptr, len); - buf_ptr += len; - s->inbuf_ptr += len; - buf_size -= len; - } - if (s->frame_size > 0 && - (s->inbuf_ptr - s->inbuf) >= s->frame_size) { - mpctx->coded_frame_size = s->frame_size; - if (mpctx->parse_only) { - /* simply return the frame data */ - *(uint8_t **)data = s->inbuf; - out_size = s->inbuf_ptr - s->inbuf; - } else { - out_size = mp_decode_frame(s, out_samples); - } - if (free_format_next_header != 0) { - s->inbuf[0] = free_format_next_header >> 24; - s->inbuf[1] = free_format_next_header >> 16; - s->inbuf[2] = free_format_next_header >> 8; - s->inbuf[3] = free_format_next_header; - s->inbuf_ptr = s->inbuf + 4; - } else - s->inbuf_ptr = s->inbuf; - s->frame_size = 0; - } - } - *data_size = out_size; - return buf_ptr - buf; -} - -void mpaudec_clear(MPAuDecContext *mpctx) -{ - assert(mpctx != NULL); - free(mpctx->priv_data); - memset(mpctx, 0, sizeof(MPAuDecContext)); -} diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudec.h b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudec.h deleted file mode 100644 index 06205ba..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudec.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Portions based on avcodec.h from libavcodec. */ - -#ifndef MPAUDEC_H -#define MPAUDEC_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* in bytes */ -#define MPAUDEC_MAX_AUDIO_FRAME_SIZE 4608 - -typedef struct MPAuDecContext { - int bit_rate; - int layer; - int sample_rate; - int channels; - int frame_size; - void *priv_data; - int parse_only; - int coded_frame_size; -} MPAuDecContext; - -int mpaudec_init(MPAuDecContext *mpctx); -int mpaudec_decode_frame(MPAuDecContext * mpctx, - void *data, int *data_size, - const unsigned char * buf, int buf_size); -void mpaudec_clear(MPAuDecContext *mpctx); - -#ifdef __cplusplus -} -#endif - -#endif /* MPAUDEC_H */ diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudectab.h b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudectab.h deleted file mode 100644 index 7db90e1..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpaudectab.h +++ /dev/null @@ -1,772 +0,0 @@ -/* Modified slightly by Matt Campbell for the - stand-alone mpaudec library. Based on mpegaudiodectab.h from libavcodec. */ - -static const uint16_t mpa_bitrate_tab[2][3][15] = { - { {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448 }, - {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 }, - {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 } }, - { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256}, - {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160}, - {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160} - } -}; - -static const uint16_t mpa_freq_tab[3] = { 44100, 48000, 32000 }; - -/*******************************************************/ -/* half mpeg encoding window (full precision) */ -static const int32_t mpa_enwindow[257] = { - 0, -1, -1, -1, -1, -1, -1, -2, - -2, -2, -2, -3, -3, -4, -4, -5, - -5, -6, -7, -7, -8, -9, -10, -11, - -13, -14, -16, -17, -19, -21, -24, -26, - -29, -31, -35, -38, -41, -45, -49, -53, - -58, -63, -68, -73, -79, -85, -91, -97, - -104, -111, -117, -125, -132, -139, -147, -154, - -161, -169, -176, -183, -190, -196, -202, -208, - 213, 218, 222, 225, 227, 228, 228, 227, - 224, 221, 215, 208, 200, 189, 177, 163, - 146, 127, 106, 83, 57, 29, -2, -36, - -72, -111, -153, -197, -244, -294, -347, -401, - -459, -519, -581, -645, -711, -779, -848, -919, - -991, -1064, -1137, -1210, -1283, -1356, -1428, -1498, - -1567, -1634, -1698, -1759, -1817, -1870, -1919, -1962, - -2001, -2032, -2057, -2075, -2085, -2087, -2080, -2063, - 2037, 2000, 1952, 1893, 1822, 1739, 1644, 1535, - 1414, 1280, 1131, 970, 794, 605, 402, 185, - -45, -288, -545, -814, -1095, -1388, -1692, -2006, - -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788, - -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, - -7910, -8209, -8491, -8755, -8998, -9219, -9416, -9585, - -9727, -9838, -9916, -9959, -9966, -9935, -9863, -9750, - -9592, -9389, -9139, -8840, -8492, -8092, -7640, -7134, - 6574, 5959, 5288, 4561, 3776, 2935, 2037, 1082, - 70, -998, -2122, -3300, -4533, -5818, -7154, -8540, - -9975,-11455,-12980,-14548,-16155,-17799,-19478,-21189, --22929,-24694,-26482,-28289,-30112,-31947,-33791,-35640, --37489,-39336,-41176,-43006,-44821,-46617,-48390,-50137, --51853,-53534,-55178,-56778,-58333,-59838,-61289,-62684, --64019,-65290,-66494,-67629,-68692,-69679,-70590,-71420, --72169,-72835,-73415,-73908,-74313,-74630,-74856,-74992, - 75038, -}; - -/*******************************************************/ -/* layer 2 tables */ - -static const int sblimit_table[5] = { 27 , 30 , 8, 12 , 30 }; - -static const int quant_steps[17] = { - 3, 5, 7, 9, 15, - 31, 63, 127, 255, 511, - 1023, 2047, 4095, 8191, 16383, - 32767, 65535 -}; - -/* we use a negative value if grouped */ -static const int quant_bits[17] = { - -5, -7, 3, -10, 4, - 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, - 15, 16 -}; - -/* encoding tables which give the quantization index. Note how it is - possible to store them efficiently ! */ -static const unsigned char alloc_table_0[] = { - 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, -}; - -static const unsigned char alloc_table_1[] = { - 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 4, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 3, 0, 1, 2, 3, 4, 5, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, - 2, 0, 1, 16, -}; - -static const unsigned char alloc_table_2[] = { - 4, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 4, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, -}; - -static const unsigned char alloc_table_3[] = { - 4, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 4, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, -}; - -static const unsigned char alloc_table_4[] = { - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 3, 0, 1, 3, 4, 5, 6, 7, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, - 2, 0, 1, 3, -}; - -static const unsigned char *alloc_tables[5] = -{ alloc_table_0, alloc_table_1, alloc_table_2, alloc_table_3, alloc_table_4, }; - -/*******************************************************/ -/* layer 3 tables */ - -/* layer3 scale factor size */ -static const uint8_t slen_table[2][16] = { - { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }, - { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 }, -}; - -/* number of lsf scale factors for a given size */ -static const uint8_t lsf_nsf_table[6][3][4] = { - { { 6, 5, 5, 5 }, { 9, 9, 9, 9 }, { 6, 9, 9, 9 } }, - { { 6, 5, 7, 3 }, { 9, 9, 12, 6 }, { 6, 9, 12, 6 } }, - { { 11, 10, 0, 0 }, { 18, 18, 0, 0 }, { 15, 18, 0, 0 } }, - { { 7, 7, 7, 0 }, { 12, 12, 12, 0 }, { 6, 15, 12, 0 } }, - { { 6, 6, 6, 3 }, { 12, 9, 9, 6 }, { 6, 12, 9, 6 } }, - { { 8, 8, 5, 0 }, { 15, 12, 9, 0 }, { 6, 18, 9, 0 } }, -}; - -/* mpegaudio layer 3 huffman tables */ - -static const uint16_t mpa_huffcodes_1[4] = { - 0x0001, 0x0001, 0x0001, 0x0000, -}; - -static const uint8_t mpa_huffbits_1[4] = { - 1, 3, 2, 3, -}; - -static const uint16_t mpa_huffcodes_2[9] = { - 0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002, - 0x0000, -}; - -static const uint8_t mpa_huffbits_2[9] = { - 1, 3, 6, 3, 3, 5, 5, 5, - 6, -}; - -static const uint16_t mpa_huffcodes_3[9] = { - 0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002, - 0x0000, -}; - -static const uint8_t mpa_huffbits_3[9] = { - 2, 2, 6, 3, 2, 5, 5, 5, - 6, -}; - -static const uint16_t mpa_huffcodes_5[16] = { - 0x0001, 0x0002, 0x0006, 0x0005, 0x0003, 0x0001, 0x0004, 0x0004, - 0x0007, 0x0005, 0x0007, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000, -}; - -static const uint8_t mpa_huffbits_5[16] = { - 1, 3, 6, 7, 3, 3, 6, 7, - 6, 6, 7, 8, 7, 6, 7, 8, -}; - -static const uint16_t mpa_huffcodes_6[16] = { - 0x0007, 0x0003, 0x0005, 0x0001, 0x0006, 0x0002, 0x0003, 0x0002, - 0x0005, 0x0004, 0x0004, 0x0001, 0x0003, 0x0003, 0x0002, 0x0000, -}; - -static const uint8_t mpa_huffbits_6[16] = { - 3, 3, 5, 7, 3, 2, 4, 5, - 4, 4, 5, 6, 6, 5, 6, 7, -}; - -static const uint16_t mpa_huffcodes_7[36] = { - 0x0001, 0x0002, 0x000a, 0x0013, 0x0010, 0x000a, 0x0003, 0x0003, - 0x0007, 0x000a, 0x0005, 0x0003, 0x000b, 0x0004, 0x000d, 0x0011, - 0x0008, 0x0004, 0x000c, 0x000b, 0x0012, 0x000f, 0x000b, 0x0002, - 0x0007, 0x0006, 0x0009, 0x000e, 0x0003, 0x0001, 0x0006, 0x0004, - 0x0005, 0x0003, 0x0002, 0x0000, -}; - -static const uint8_t mpa_huffbits_7[36] = { - 1, 3, 6, 8, 8, 9, 3, 4, - 6, 7, 7, 8, 6, 5, 7, 8, - 8, 9, 7, 7, 8, 9, 9, 9, - 7, 7, 8, 9, 9, 10, 8, 8, - 9, 10, 10, 10, -}; - -static const uint16_t mpa_huffcodes_8[36] = { - 0x0003, 0x0004, 0x0006, 0x0012, 0x000c, 0x0005, 0x0005, 0x0001, - 0x0002, 0x0010, 0x0009, 0x0003, 0x0007, 0x0003, 0x0005, 0x000e, - 0x0007, 0x0003, 0x0013, 0x0011, 0x000f, 0x000d, 0x000a, 0x0004, - 0x000d, 0x0005, 0x0008, 0x000b, 0x0005, 0x0001, 0x000c, 0x0004, - 0x0004, 0x0001, 0x0001, 0x0000, -}; - -static const uint8_t mpa_huffbits_8[36] = { - 2, 3, 6, 8, 8, 9, 3, 2, - 4, 8, 8, 8, 6, 4, 6, 8, - 8, 9, 8, 8, 8, 9, 9, 10, - 8, 7, 8, 9, 10, 10, 9, 8, - 9, 9, 11, 11, -}; - -static const uint16_t mpa_huffcodes_9[36] = { - 0x0007, 0x0005, 0x0009, 0x000e, 0x000f, 0x0007, 0x0006, 0x0004, - 0x0005, 0x0005, 0x0006, 0x0007, 0x0007, 0x0006, 0x0008, 0x0008, - 0x0008, 0x0005, 0x000f, 0x0006, 0x0009, 0x000a, 0x0005, 0x0001, - 0x000b, 0x0007, 0x0009, 0x0006, 0x0004, 0x0001, 0x000e, 0x0004, - 0x0006, 0x0002, 0x0006, 0x0000, -}; - -static const uint8_t mpa_huffbits_9[36] = { - 3, 3, 5, 6, 8, 9, 3, 3, - 4, 5, 6, 8, 4, 4, 5, 6, - 7, 8, 6, 5, 6, 7, 7, 8, - 7, 6, 7, 7, 8, 9, 8, 7, - 8, 8, 9, 9, -}; - -static const uint16_t mpa_huffcodes_10[64] = { - 0x0001, 0x0002, 0x000a, 0x0017, 0x0023, 0x001e, 0x000c, 0x0011, - 0x0003, 0x0003, 0x0008, 0x000c, 0x0012, 0x0015, 0x000c, 0x0007, - 0x000b, 0x0009, 0x000f, 0x0015, 0x0020, 0x0028, 0x0013, 0x0006, - 0x000e, 0x000d, 0x0016, 0x0022, 0x002e, 0x0017, 0x0012, 0x0007, - 0x0014, 0x0013, 0x0021, 0x002f, 0x001b, 0x0016, 0x0009, 0x0003, - 0x001f, 0x0016, 0x0029, 0x001a, 0x0015, 0x0014, 0x0005, 0x0003, - 0x000e, 0x000d, 0x000a, 0x000b, 0x0010, 0x0006, 0x0005, 0x0001, - 0x0009, 0x0008, 0x0007, 0x0008, 0x0004, 0x0004, 0x0002, 0x0000, -}; - -static const uint8_t mpa_huffbits_10[64] = { - 1, 3, 6, 8, 9, 9, 9, 10, - 3, 4, 6, 7, 8, 9, 8, 8, - 6, 6, 7, 8, 9, 10, 9, 9, - 7, 7, 8, 9, 10, 10, 9, 10, - 8, 8, 9, 10, 10, 10, 10, 10, - 9, 9, 10, 10, 11, 11, 10, 11, - 8, 8, 9, 10, 10, 10, 11, 11, - 9, 8, 9, 10, 10, 11, 11, 11, -}; - -static const uint16_t mpa_huffcodes_11[64] = { - 0x0003, 0x0004, 0x000a, 0x0018, 0x0022, 0x0021, 0x0015, 0x000f, - 0x0005, 0x0003, 0x0004, 0x000a, 0x0020, 0x0011, 0x000b, 0x000a, - 0x000b, 0x0007, 0x000d, 0x0012, 0x001e, 0x001f, 0x0014, 0x0005, - 0x0019, 0x000b, 0x0013, 0x003b, 0x001b, 0x0012, 0x000c, 0x0005, - 0x0023, 0x0021, 0x001f, 0x003a, 0x001e, 0x0010, 0x0007, 0x0005, - 0x001c, 0x001a, 0x0020, 0x0013, 0x0011, 0x000f, 0x0008, 0x000e, - 0x000e, 0x000c, 0x0009, 0x000d, 0x000e, 0x0009, 0x0004, 0x0001, - 0x000b, 0x0004, 0x0006, 0x0006, 0x0006, 0x0003, 0x0002, 0x0000, -}; - -static const uint8_t mpa_huffbits_11[64] = { - 2, 3, 5, 7, 8, 9, 8, 9, - 3, 3, 4, 6, 8, 8, 7, 8, - 5, 5, 6, 7, 8, 9, 8, 8, - 7, 6, 7, 9, 8, 10, 8, 9, - 8, 8, 8, 9, 9, 10, 9, 10, - 8, 8, 9, 10, 10, 11, 10, 11, - 8, 7, 7, 8, 9, 10, 10, 10, - 8, 7, 8, 9, 10, 10, 10, 10, -}; - -static const uint16_t mpa_huffcodes_12[64] = { - 0x0009, 0x0006, 0x0010, 0x0021, 0x0029, 0x0027, 0x0026, 0x001a, - 0x0007, 0x0005, 0x0006, 0x0009, 0x0017, 0x0010, 0x001a, 0x000b, - 0x0011, 0x0007, 0x000b, 0x000e, 0x0015, 0x001e, 0x000a, 0x0007, - 0x0011, 0x000a, 0x000f, 0x000c, 0x0012, 0x001c, 0x000e, 0x0005, - 0x0020, 0x000d, 0x0016, 0x0013, 0x0012, 0x0010, 0x0009, 0x0005, - 0x0028, 0x0011, 0x001f, 0x001d, 0x0011, 0x000d, 0x0004, 0x0002, - 0x001b, 0x000c, 0x000b, 0x000f, 0x000a, 0x0007, 0x0004, 0x0001, - 0x001b, 0x000c, 0x0008, 0x000c, 0x0006, 0x0003, 0x0001, 0x0000, -}; - -static const uint8_t mpa_huffbits_12[64] = { - 4, 3, 5, 7, 8, 9, 9, 9, - 3, 3, 4, 5, 7, 7, 8, 8, - 5, 4, 5, 6, 7, 8, 7, 8, - 6, 5, 6, 6, 7, 8, 8, 8, - 7, 6, 7, 7, 8, 8, 8, 9, - 8, 7, 8, 8, 8, 9, 8, 9, - 8, 7, 7, 8, 8, 9, 9, 10, - 9, 8, 8, 9, 9, 9, 9, 10, -}; - -static const uint16_t mpa_huffcodes_13[256] = { - 0x0001, 0x0005, 0x000e, 0x0015, 0x0022, 0x0033, 0x002e, 0x0047, - 0x002a, 0x0034, 0x0044, 0x0034, 0x0043, 0x002c, 0x002b, 0x0013, - 0x0003, 0x0004, 0x000c, 0x0013, 0x001f, 0x001a, 0x002c, 0x0021, - 0x001f, 0x0018, 0x0020, 0x0018, 0x001f, 0x0023, 0x0016, 0x000e, - 0x000f, 0x000d, 0x0017, 0x0024, 0x003b, 0x0031, 0x004d, 0x0041, - 0x001d, 0x0028, 0x001e, 0x0028, 0x001b, 0x0021, 0x002a, 0x0010, - 0x0016, 0x0014, 0x0025, 0x003d, 0x0038, 0x004f, 0x0049, 0x0040, - 0x002b, 0x004c, 0x0038, 0x0025, 0x001a, 0x001f, 0x0019, 0x000e, - 0x0023, 0x0010, 0x003c, 0x0039, 0x0061, 0x004b, 0x0072, 0x005b, - 0x0036, 0x0049, 0x0037, 0x0029, 0x0030, 0x0035, 0x0017, 0x0018, - 0x003a, 0x001b, 0x0032, 0x0060, 0x004c, 0x0046, 0x005d, 0x0054, - 0x004d, 0x003a, 0x004f, 0x001d, 0x004a, 0x0031, 0x0029, 0x0011, - 0x002f, 0x002d, 0x004e, 0x004a, 0x0073, 0x005e, 0x005a, 0x004f, - 0x0045, 0x0053, 0x0047, 0x0032, 0x003b, 0x0026, 0x0024, 0x000f, - 0x0048, 0x0022, 0x0038, 0x005f, 0x005c, 0x0055, 0x005b, 0x005a, - 0x0056, 0x0049, 0x004d, 0x0041, 0x0033, 0x002c, 0x002b, 0x002a, - 0x002b, 0x0014, 0x001e, 0x002c, 0x0037, 0x004e, 0x0048, 0x0057, - 0x004e, 0x003d, 0x002e, 0x0036, 0x0025, 0x001e, 0x0014, 0x0010, - 0x0035, 0x0019, 0x0029, 0x0025, 0x002c, 0x003b, 0x0036, 0x0051, - 0x0042, 0x004c, 0x0039, 0x0036, 0x0025, 0x0012, 0x0027, 0x000b, - 0x0023, 0x0021, 0x001f, 0x0039, 0x002a, 0x0052, 0x0048, 0x0050, - 0x002f, 0x003a, 0x0037, 0x0015, 0x0016, 0x001a, 0x0026, 0x0016, - 0x0035, 0x0019, 0x0017, 0x0026, 0x0046, 0x003c, 0x0033, 0x0024, - 0x0037, 0x001a, 0x0022, 0x0017, 0x001b, 0x000e, 0x0009, 0x0007, - 0x0022, 0x0020, 0x001c, 0x0027, 0x0031, 0x004b, 0x001e, 0x0034, - 0x0030, 0x0028, 0x0034, 0x001c, 0x0012, 0x0011, 0x0009, 0x0005, - 0x002d, 0x0015, 0x0022, 0x0040, 0x0038, 0x0032, 0x0031, 0x002d, - 0x001f, 0x0013, 0x000c, 0x000f, 0x000a, 0x0007, 0x0006, 0x0003, - 0x0030, 0x0017, 0x0014, 0x0027, 0x0024, 0x0023, 0x0035, 0x0015, - 0x0010, 0x0017, 0x000d, 0x000a, 0x0006, 0x0001, 0x0004, 0x0002, - 0x0010, 0x000f, 0x0011, 0x001b, 0x0019, 0x0014, 0x001d, 0x000b, - 0x0011, 0x000c, 0x0010, 0x0008, 0x0001, 0x0001, 0x0000, 0x0001, -}; - -static const uint8_t mpa_huffbits_13[256] = { - 1, 4, 6, 7, 8, 9, 9, 10, - 9, 10, 11, 11, 12, 12, 13, 13, - 3, 4, 6, 7, 8, 8, 9, 9, - 9, 9, 10, 10, 11, 12, 12, 12, - 6, 6, 7, 8, 9, 9, 10, 10, - 9, 10, 10, 11, 11, 12, 13, 13, - 7, 7, 8, 9, 9, 10, 10, 10, - 10, 11, 11, 11, 11, 12, 13, 13, - 8, 7, 9, 9, 10, 10, 11, 11, - 10, 11, 11, 12, 12, 13, 13, 14, - 9, 8, 9, 10, 10, 10, 11, 11, - 11, 11, 12, 11, 13, 13, 14, 14, - 9, 9, 10, 10, 11, 11, 11, 11, - 11, 12, 12, 12, 13, 13, 14, 14, - 10, 9, 10, 11, 11, 11, 12, 12, - 12, 12, 13, 13, 13, 14, 16, 16, - 9, 8, 9, 10, 10, 11, 11, 12, - 12, 12, 12, 13, 13, 14, 15, 15, - 10, 9, 10, 10, 11, 11, 11, 13, - 12, 13, 13, 14, 14, 14, 16, 15, - 10, 10, 10, 11, 11, 12, 12, 13, - 12, 13, 14, 13, 14, 15, 16, 17, - 11, 10, 10, 11, 12, 12, 12, 12, - 13, 13, 13, 14, 15, 15, 15, 16, - 11, 11, 11, 12, 12, 13, 12, 13, - 14, 14, 15, 15, 15, 16, 16, 16, - 12, 11, 12, 13, 13, 13, 14, 14, - 14, 14, 14, 15, 16, 15, 16, 16, - 13, 12, 12, 13, 13, 13, 15, 14, - 14, 17, 15, 15, 15, 17, 16, 16, - 12, 12, 13, 14, 14, 14, 15, 14, - 15, 15, 16, 16, 19, 18, 19, 16, -}; - -static const uint16_t mpa_huffcodes_15[256] = { - 0x0007, 0x000c, 0x0012, 0x0035, 0x002f, 0x004c, 0x007c, 0x006c, - 0x0059, 0x007b, 0x006c, 0x0077, 0x006b, 0x0051, 0x007a, 0x003f, - 0x000d, 0x0005, 0x0010, 0x001b, 0x002e, 0x0024, 0x003d, 0x0033, - 0x002a, 0x0046, 0x0034, 0x0053, 0x0041, 0x0029, 0x003b, 0x0024, - 0x0013, 0x0011, 0x000f, 0x0018, 0x0029, 0x0022, 0x003b, 0x0030, - 0x0028, 0x0040, 0x0032, 0x004e, 0x003e, 0x0050, 0x0038, 0x0021, - 0x001d, 0x001c, 0x0019, 0x002b, 0x0027, 0x003f, 0x0037, 0x005d, - 0x004c, 0x003b, 0x005d, 0x0048, 0x0036, 0x004b, 0x0032, 0x001d, - 0x0034, 0x0016, 0x002a, 0x0028, 0x0043, 0x0039, 0x005f, 0x004f, - 0x0048, 0x0039, 0x0059, 0x0045, 0x0031, 0x0042, 0x002e, 0x001b, - 0x004d, 0x0025, 0x0023, 0x0042, 0x003a, 0x0034, 0x005b, 0x004a, - 0x003e, 0x0030, 0x004f, 0x003f, 0x005a, 0x003e, 0x0028, 0x0026, - 0x007d, 0x0020, 0x003c, 0x0038, 0x0032, 0x005c, 0x004e, 0x0041, - 0x0037, 0x0057, 0x0047, 0x0033, 0x0049, 0x0033, 0x0046, 0x001e, - 0x006d, 0x0035, 0x0031, 0x005e, 0x0058, 0x004b, 0x0042, 0x007a, - 0x005b, 0x0049, 0x0038, 0x002a, 0x0040, 0x002c, 0x0015, 0x0019, - 0x005a, 0x002b, 0x0029, 0x004d, 0x0049, 0x003f, 0x0038, 0x005c, - 0x004d, 0x0042, 0x002f, 0x0043, 0x0030, 0x0035, 0x0024, 0x0014, - 0x0047, 0x0022, 0x0043, 0x003c, 0x003a, 0x0031, 0x0058, 0x004c, - 0x0043, 0x006a, 0x0047, 0x0036, 0x0026, 0x0027, 0x0017, 0x000f, - 0x006d, 0x0035, 0x0033, 0x002f, 0x005a, 0x0052, 0x003a, 0x0039, - 0x0030, 0x0048, 0x0039, 0x0029, 0x0017, 0x001b, 0x003e, 0x0009, - 0x0056, 0x002a, 0x0028, 0x0025, 0x0046, 0x0040, 0x0034, 0x002b, - 0x0046, 0x0037, 0x002a, 0x0019, 0x001d, 0x0012, 0x000b, 0x000b, - 0x0076, 0x0044, 0x001e, 0x0037, 0x0032, 0x002e, 0x004a, 0x0041, - 0x0031, 0x0027, 0x0018, 0x0010, 0x0016, 0x000d, 0x000e, 0x0007, - 0x005b, 0x002c, 0x0027, 0x0026, 0x0022, 0x003f, 0x0034, 0x002d, - 0x001f, 0x0034, 0x001c, 0x0013, 0x000e, 0x0008, 0x0009, 0x0003, - 0x007b, 0x003c, 0x003a, 0x0035, 0x002f, 0x002b, 0x0020, 0x0016, - 0x0025, 0x0018, 0x0011, 0x000c, 0x000f, 0x000a, 0x0002, 0x0001, - 0x0047, 0x0025, 0x0022, 0x001e, 0x001c, 0x0014, 0x0011, 0x001a, - 0x0015, 0x0010, 0x000a, 0x0006, 0x0008, 0x0006, 0x0002, 0x0000, -}; - -static const uint8_t mpa_huffbits_15[256] = { - 3, 4, 5, 7, 7, 8, 9, 9, - 9, 10, 10, 11, 11, 11, 12, 13, - 4, 3, 5, 6, 7, 7, 8, 8, - 8, 9, 9, 10, 10, 10, 11, 11, - 5, 5, 5, 6, 7, 7, 8, 8, - 8, 9, 9, 10, 10, 11, 11, 11, - 6, 6, 6, 7, 7, 8, 8, 9, - 9, 9, 10, 10, 10, 11, 11, 11, - 7, 6, 7, 7, 8, 8, 9, 9, - 9, 9, 10, 10, 10, 11, 11, 11, - 8, 7, 7, 8, 8, 8, 9, 9, - 9, 9, 10, 10, 11, 11, 11, 12, - 9, 7, 8, 8, 8, 9, 9, 9, - 9, 10, 10, 10, 11, 11, 12, 12, - 9, 8, 8, 9, 9, 9, 9, 10, - 10, 10, 10, 10, 11, 11, 11, 12, - 9, 8, 8, 9, 9, 9, 9, 10, - 10, 10, 10, 11, 11, 12, 12, 12, - 9, 8, 9, 9, 9, 9, 10, 10, - 10, 11, 11, 11, 11, 12, 12, 12, - 10, 9, 9, 9, 10, 10, 10, 10, - 10, 11, 11, 11, 11, 12, 13, 12, - 10, 9, 9, 9, 10, 10, 10, 10, - 11, 11, 11, 11, 12, 12, 12, 13, - 11, 10, 9, 10, 10, 10, 11, 11, - 11, 11, 11, 11, 12, 12, 13, 13, - 11, 10, 10, 10, 10, 11, 11, 11, - 11, 12, 12, 12, 12, 12, 13, 13, - 12, 11, 11, 11, 11, 11, 11, 11, - 12, 12, 12, 12, 13, 13, 12, 13, - 12, 11, 11, 11, 11, 11, 11, 12, - 12, 12, 12, 12, 13, 13, 13, 13, -}; - -static const uint16_t mpa_huffcodes_16[256] = { - 0x0001, 0x0005, 0x000e, 0x002c, 0x004a, 0x003f, 0x006e, 0x005d, - 0x00ac, 0x0095, 0x008a, 0x00f2, 0x00e1, 0x00c3, 0x0178, 0x0011, - 0x0003, 0x0004, 0x000c, 0x0014, 0x0023, 0x003e, 0x0035, 0x002f, - 0x0053, 0x004b, 0x0044, 0x0077, 0x00c9, 0x006b, 0x00cf, 0x0009, - 0x000f, 0x000d, 0x0017, 0x0026, 0x0043, 0x003a, 0x0067, 0x005a, - 0x00a1, 0x0048, 0x007f, 0x0075, 0x006e, 0x00d1, 0x00ce, 0x0010, - 0x002d, 0x0015, 0x0027, 0x0045, 0x0040, 0x0072, 0x0063, 0x0057, - 0x009e, 0x008c, 0x00fc, 0x00d4, 0x00c7, 0x0183, 0x016d, 0x001a, - 0x004b, 0x0024, 0x0044, 0x0041, 0x0073, 0x0065, 0x00b3, 0x00a4, - 0x009b, 0x0108, 0x00f6, 0x00e2, 0x018b, 0x017e, 0x016a, 0x0009, - 0x0042, 0x001e, 0x003b, 0x0038, 0x0066, 0x00b9, 0x00ad, 0x0109, - 0x008e, 0x00fd, 0x00e8, 0x0190, 0x0184, 0x017a, 0x01bd, 0x0010, - 0x006f, 0x0036, 0x0034, 0x0064, 0x00b8, 0x00b2, 0x00a0, 0x0085, - 0x0101, 0x00f4, 0x00e4, 0x00d9, 0x0181, 0x016e, 0x02cb, 0x000a, - 0x0062, 0x0030, 0x005b, 0x0058, 0x00a5, 0x009d, 0x0094, 0x0105, - 0x00f8, 0x0197, 0x018d, 0x0174, 0x017c, 0x0379, 0x0374, 0x0008, - 0x0055, 0x0054, 0x0051, 0x009f, 0x009c, 0x008f, 0x0104, 0x00f9, - 0x01ab, 0x0191, 0x0188, 0x017f, 0x02d7, 0x02c9, 0x02c4, 0x0007, - 0x009a, 0x004c, 0x0049, 0x008d, 0x0083, 0x0100, 0x00f5, 0x01aa, - 0x0196, 0x018a, 0x0180, 0x02df, 0x0167, 0x02c6, 0x0160, 0x000b, - 0x008b, 0x0081, 0x0043, 0x007d, 0x00f7, 0x00e9, 0x00e5, 0x00db, - 0x0189, 0x02e7, 0x02e1, 0x02d0, 0x0375, 0x0372, 0x01b7, 0x0004, - 0x00f3, 0x0078, 0x0076, 0x0073, 0x00e3, 0x00df, 0x018c, 0x02ea, - 0x02e6, 0x02e0, 0x02d1, 0x02c8, 0x02c2, 0x00df, 0x01b4, 0x0006, - 0x00ca, 0x00e0, 0x00de, 0x00da, 0x00d8, 0x0185, 0x0182, 0x017d, - 0x016c, 0x0378, 0x01bb, 0x02c3, 0x01b8, 0x01b5, 0x06c0, 0x0004, - 0x02eb, 0x00d3, 0x00d2, 0x00d0, 0x0172, 0x017b, 0x02de, 0x02d3, - 0x02ca, 0x06c7, 0x0373, 0x036d, 0x036c, 0x0d83, 0x0361, 0x0002, - 0x0179, 0x0171, 0x0066, 0x00bb, 0x02d6, 0x02d2, 0x0166, 0x02c7, - 0x02c5, 0x0362, 0x06c6, 0x0367, 0x0d82, 0x0366, 0x01b2, 0x0000, - 0x000c, 0x000a, 0x0007, 0x000b, 0x000a, 0x0011, 0x000b, 0x0009, - 0x000d, 0x000c, 0x000a, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003, -}; - -static const uint8_t mpa_huffbits_16[256] = { - 1, 4, 6, 8, 9, 9, 10, 10, - 11, 11, 11, 12, 12, 12, 13, 9, - 3, 4, 6, 7, 8, 9, 9, 9, - 10, 10, 10, 11, 12, 11, 12, 8, - 6, 6, 7, 8, 9, 9, 10, 10, - 11, 10, 11, 11, 11, 12, 12, 9, - 8, 7, 8, 9, 9, 10, 10, 10, - 11, 11, 12, 12, 12, 13, 13, 10, - 9, 8, 9, 9, 10, 10, 11, 11, - 11, 12, 12, 12, 13, 13, 13, 9, - 9, 8, 9, 9, 10, 11, 11, 12, - 11, 12, 12, 13, 13, 13, 14, 10, - 10, 9, 9, 10, 11, 11, 11, 11, - 12, 12, 12, 12, 13, 13, 14, 10, - 10, 9, 10, 10, 11, 11, 11, 12, - 12, 13, 13, 13, 13, 15, 15, 10, - 10, 10, 10, 11, 11, 11, 12, 12, - 13, 13, 13, 13, 14, 14, 14, 10, - 11, 10, 10, 11, 11, 12, 12, 13, - 13, 13, 13, 14, 13, 14, 13, 11, - 11, 11, 10, 11, 12, 12, 12, 12, - 13, 14, 14, 14, 15, 15, 14, 10, - 12, 11, 11, 11, 12, 12, 13, 14, - 14, 14, 14, 14, 14, 13, 14, 11, - 12, 12, 12, 12, 12, 13, 13, 13, - 13, 15, 14, 14, 14, 14, 16, 11, - 14, 12, 12, 12, 13, 13, 14, 14, - 14, 16, 15, 15, 15, 17, 15, 11, - 13, 13, 11, 12, 14, 14, 13, 14, - 14, 15, 16, 15, 17, 15, 14, 11, - 9, 8, 8, 9, 9, 10, 10, 10, - 11, 11, 11, 11, 11, 11, 11, 8, -}; - -static const uint16_t mpa_huffcodes_24[256] = { - 0x000f, 0x000d, 0x002e, 0x0050, 0x0092, 0x0106, 0x00f8, 0x01b2, - 0x01aa, 0x029d, 0x028d, 0x0289, 0x026d, 0x0205, 0x0408, 0x0058, - 0x000e, 0x000c, 0x0015, 0x0026, 0x0047, 0x0082, 0x007a, 0x00d8, - 0x00d1, 0x00c6, 0x0147, 0x0159, 0x013f, 0x0129, 0x0117, 0x002a, - 0x002f, 0x0016, 0x0029, 0x004a, 0x0044, 0x0080, 0x0078, 0x00dd, - 0x00cf, 0x00c2, 0x00b6, 0x0154, 0x013b, 0x0127, 0x021d, 0x0012, - 0x0051, 0x0027, 0x004b, 0x0046, 0x0086, 0x007d, 0x0074, 0x00dc, - 0x00cc, 0x00be, 0x00b2, 0x0145, 0x0137, 0x0125, 0x010f, 0x0010, - 0x0093, 0x0048, 0x0045, 0x0087, 0x007f, 0x0076, 0x0070, 0x00d2, - 0x00c8, 0x00bc, 0x0160, 0x0143, 0x0132, 0x011d, 0x021c, 0x000e, - 0x0107, 0x0042, 0x0081, 0x007e, 0x0077, 0x0072, 0x00d6, 0x00ca, - 0x00c0, 0x00b4, 0x0155, 0x013d, 0x012d, 0x0119, 0x0106, 0x000c, - 0x00f9, 0x007b, 0x0079, 0x0075, 0x0071, 0x00d7, 0x00ce, 0x00c3, - 0x00b9, 0x015b, 0x014a, 0x0134, 0x0123, 0x0110, 0x0208, 0x000a, - 0x01b3, 0x0073, 0x006f, 0x006d, 0x00d3, 0x00cb, 0x00c4, 0x00bb, - 0x0161, 0x014c, 0x0139, 0x012a, 0x011b, 0x0213, 0x017d, 0x0011, - 0x01ab, 0x00d4, 0x00d0, 0x00cd, 0x00c9, 0x00c1, 0x00ba, 0x00b1, - 0x00a9, 0x0140, 0x012f, 0x011e, 0x010c, 0x0202, 0x0179, 0x0010, - 0x014f, 0x00c7, 0x00c5, 0x00bf, 0x00bd, 0x00b5, 0x00ae, 0x014d, - 0x0141, 0x0131, 0x0121, 0x0113, 0x0209, 0x017b, 0x0173, 0x000b, - 0x029c, 0x00b8, 0x00b7, 0x00b3, 0x00af, 0x0158, 0x014b, 0x013a, - 0x0130, 0x0122, 0x0115, 0x0212, 0x017f, 0x0175, 0x016e, 0x000a, - 0x028c, 0x015a, 0x00ab, 0x00a8, 0x00a4, 0x013e, 0x0135, 0x012b, - 0x011f, 0x0114, 0x0107, 0x0201, 0x0177, 0x0170, 0x016a, 0x0006, - 0x0288, 0x0142, 0x013c, 0x0138, 0x0133, 0x012e, 0x0124, 0x011c, - 0x010d, 0x0105, 0x0200, 0x0178, 0x0172, 0x016c, 0x0167, 0x0004, - 0x026c, 0x012c, 0x0128, 0x0126, 0x0120, 0x011a, 0x0111, 0x010a, - 0x0203, 0x017c, 0x0176, 0x0171, 0x016d, 0x0169, 0x0165, 0x0002, - 0x0409, 0x0118, 0x0116, 0x0112, 0x010b, 0x0108, 0x0103, 0x017e, - 0x017a, 0x0174, 0x016f, 0x016b, 0x0168, 0x0166, 0x0164, 0x0000, - 0x002b, 0x0014, 0x0013, 0x0011, 0x000f, 0x000d, 0x000b, 0x0009, - 0x0007, 0x0006, 0x0004, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003, -}; - -static const uint8_t mpa_huffbits_24[256] = { - 4, 4, 6, 7, 8, 9, 9, 10, - 10, 11, 11, 11, 11, 11, 12, 9, - 4, 4, 5, 6, 7, 8, 8, 9, - 9, 9, 10, 10, 10, 10, 10, 8, - 6, 5, 6, 7, 7, 8, 8, 9, - 9, 9, 9, 10, 10, 10, 11, 7, - 7, 6, 7, 7, 8, 8, 8, 9, - 9, 9, 9, 10, 10, 10, 10, 7, - 8, 7, 7, 8, 8, 8, 8, 9, - 9, 9, 10, 10, 10, 10, 11, 7, - 9, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 10, 10, 10, 10, 10, 7, - 9, 8, 8, 8, 8, 9, 9, 9, - 9, 10, 10, 10, 10, 10, 11, 7, - 10, 8, 8, 8, 9, 9, 9, 9, - 10, 10, 10, 10, 10, 11, 11, 8, - 10, 9, 9, 9, 9, 9, 9, 9, - 9, 10, 10, 10, 10, 11, 11, 8, - 10, 9, 9, 9, 9, 9, 9, 10, - 10, 10, 10, 10, 11, 11, 11, 8, - 11, 9, 9, 9, 9, 10, 10, 10, - 10, 10, 10, 11, 11, 11, 11, 8, - 11, 10, 9, 9, 9, 10, 10, 10, - 10, 10, 10, 11, 11, 11, 11, 8, - 11, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 11, 11, 11, 11, 11, 8, - 11, 10, 10, 10, 10, 10, 10, 10, - 11, 11, 11, 11, 11, 11, 11, 8, - 12, 10, 10, 10, 10, 10, 10, 11, - 11, 11, 11, 11, 11, 11, 11, 8, - 8, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 8, 8, 8, 8, 4, -}; - -static const HuffTable mpa_huff_tables[16] = { -{ 1, NULL, NULL }, -{ 2, mpa_huffbits_1, mpa_huffcodes_1 }, -{ 3, mpa_huffbits_2, mpa_huffcodes_2 }, -{ 3, mpa_huffbits_3, mpa_huffcodes_3 }, -{ 4, mpa_huffbits_5, mpa_huffcodes_5 }, -{ 4, mpa_huffbits_6, mpa_huffcodes_6 }, -{ 6, mpa_huffbits_7, mpa_huffcodes_7 }, -{ 6, mpa_huffbits_8, mpa_huffcodes_8 }, -{ 6, mpa_huffbits_9, mpa_huffcodes_9 }, -{ 8, mpa_huffbits_10, mpa_huffcodes_10 }, -{ 8, mpa_huffbits_11, mpa_huffcodes_11 }, -{ 8, mpa_huffbits_12, mpa_huffcodes_12 }, -{ 16, mpa_huffbits_13, mpa_huffcodes_13 }, -{ 16, mpa_huffbits_15, mpa_huffcodes_15 }, -{ 16, mpa_huffbits_16, mpa_huffcodes_16 }, -{ 16, mpa_huffbits_24, mpa_huffcodes_24 }, -}; - -static const uint8_t mpa_huff_data[32][2] = { -{ 0, 0 }, -{ 1, 0 }, -{ 2, 0 }, -{ 3, 0 }, -{ 0, 0 }, -{ 4, 0 }, -{ 5, 0 }, -{ 6, 0 }, -{ 7, 0 }, -{ 8, 0 }, -{ 9, 0 }, -{ 10, 0 }, -{ 11, 0 }, -{ 12, 0 }, -{ 0, 0 }, -{ 13, 0 }, -{ 14, 1 }, -{ 14, 2 }, -{ 14, 3 }, -{ 14, 4 }, -{ 14, 6 }, -{ 14, 8 }, -{ 14, 10 }, -{ 14, 13 }, -{ 15, 4 }, -{ 15, 5 }, -{ 15, 6 }, -{ 15, 7 }, -{ 15, 8 }, -{ 15, 9 }, -{ 15, 11 }, -{ 15, 13 }, -}; - - -/* huffman tables for quadrules */ -static uint8_t mpa_quad_codes[2][16] = { - { 1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1, }, - { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, }, -}; - -static uint8_t mpa_quad_bits[2][16] = { - { 1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6, }, - { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, }, -}; - -/* band size tables */ -static const uint8_t band_size_long[9][22] = { -{ 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10, - 12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158, }, /* 44100 */ -{ 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10, - 12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192, }, /* 48000 */ -{ 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12, - 16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26, }, /* 32000 */ -{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, - 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 22050 */ -{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, - 18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36, }, /* 24000 */ -{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, - 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 16000 */ -{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, - 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 11025 */ -{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, - 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 12000 */ -{ 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32, - 40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2, }, /* 8000 */ -}; - -static const uint8_t band_size_short[9][13] = { -{ 4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56, }, /* 44100 */ -{ 4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66, }, /* 48000 */ -{ 4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12, }, /* 32000 */ -{ 4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18, }, /* 22050 */ -{ 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12, }, /* 24000 */ -{ 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 16000 */ -{ 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 11025 */ -{ 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 12000 */ -{ 8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26, }, /* 8000 */ -}; - -static const uint8_t mpa_pretab[2][22] = { - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 }, -}; - -/* table for alias reduction (XXX: store it as integer !) */ -static const float ci_table[8] = { - -0.6f, -0.535f, -0.33f, -0.185f, -0.095f, -0.041f, -0.0142f, -0.0037f, -}; diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpegaudio.h b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpegaudio.h deleted file mode 100644 index 51f0291..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/decoder/mpegaudio.h +++ /dev/null @@ -1,17 +0,0 @@ -/* Modified slightly by Matt Campbell for the - stand-alone mpaudec library. Based on mpegaudio.h from libavcodec. */ - -/* max frame size, in samples */ -#define MPA_FRAME_SIZE 1152 - -/* max compressed frame size */ -#define MPA_MAX_CODED_FRAME_SIZE 1792 - -#define MPA_MAX_CHANNELS 2 - -#define SBLIMIT 32 /* number of subbands */ - -#define MPA_STEREO 0 -#define MPA_JSTEREO 1 -#define MPA_DUAL 2 -#define MPA_MONO 3 diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/ikpMP3.cpp b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/ikpMP3.cpp deleted file mode 100644 index f1b0604..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/ikpMP3.cpp +++ /dev/null @@ -1,41 +0,0 @@ - -#include -#include -#include -#include "CIrrKlangAudioStreamLoaderMP3.h" - -using namespace irrklang; - -// this is the only function needed to be implemented for the plugin, it gets -// called by irrKlang when loaded. -// In this plugin, we create an audiostream loader class and register -// it at the engine, but a plugin can do anything. -// Be sure to name the function 'irrKlangPluginInit' and let the dll start with 'ikp'. - -#ifdef WIN32 -// Windows version -__declspec(dllexport) void __stdcall irrKlangPluginInit(ISoundEngine* engine, const char* version) -#else -// Linux version -void irrKlangPluginInit(ISoundEngine* engine, const char* version) -#endif -{ - // do some version security check to be sure that this plugin isn't begin used - // by some newer irrKlang version with changed interfaces which could possibily - // cause crashes. - - if (strcmp(version, IRR_KLANG_VERSION)) - { - printf("This MP3 plugin only supports irrKlang version %s, mp3 playback disabled.\n", IRR_KLANG_VERSION); - return; - } - - // create and register the loader - - CIrrKlangAudioStreamLoaderMP3* loader = new CIrrKlangAudioStreamLoaderMP3(); - engine->registerAudioStreamLoader(loader); - loader->drop(); - - // that's it, that's all. -} - diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/license.txt b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/license.txt deleted file mode 100644 index d3d6502..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/license.txt +++ /dev/null @@ -1,458 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS diff --git a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/readme.txt b/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/readme.txt deleted file mode 100644 index bbfbf4d..0000000 --- a/BAKKA Editor/irrKlang-64bit-1.6.0/plugins/ikpMP3/readme.txt +++ /dev/null @@ -1,7 +0,0 @@ -ikpMP3 is a plugin for irrKlang. -Copyright (C) 2002-2007 Nikolaus Gebhardt -Part of the code for this plugin for irrKlang is based on: - MP3 input for Audiere by Matt Campbell , based on - libavcodec from ffmpeg (http://ffmpeg.sourceforge.net/). - See license.txt for license details of this plugin. -