• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Prosty Equalizer - Kod się kompiluje ale nic nie działa.

0 głosów
873 wizyt
pytanie zadane 9 października 2019 w C i C++ przez Piotr_Minda Początkujący (380 p.)
zamknięte 10 października 2019 przez Piotr_Minda

Witam, piszę sobie prosty program multimedialny z użyciem klas, oraz biblioteki DLL multimedialnej LibZPlay. 

Program zawiera Equalizer, zbudowany jest na osobnej formie kilka bandów, wraz ze wzmocnieniem(Preamp);

Problem jest tego typu, że napisany program się kompiluje, ale sam equalizer zupełnie nie reaguje, nawet wzmocnienie EQ nie wpływa na odtwarzany dźwięk. Będę wdzięczny, za analizę kodu gdzie może być błąd. Co ciekawe, nie mam żadnych access violation, nic a nic żadnych błędów pamięci.

Programuję w środowisku RADStudio 10.3.2 ze stajni Embarcadero.

O to kod: 
 

//---------------------------------------------------------------------------

#pragma hdrstop

#include "EngineDllPlayClass.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma comment(lib, "libzplay_borland.lib")


__fastcall TEngineDllPlayClass::TEngineDllPlayClass(TTrackBar *B1, TTrackBar *B2)

{
	player = createZPlay();
        B1 = new TTrackBar(B1);
	B2 = new TTrackBar(B2);
}
//---------------------------------------------------------------------------
__fastcall TEngineDllPlayClass::~TEngineDllPlayClass()
{
   player->Release();
   B1->Free();
   B2->Free();
}
void __fastcall TEngineDllPlayClass::B1Gain(TTrackBar *B1)
{
   player->SetEqualizerBandGain(0,B1->Max*1000-(B1->Position*1000)+B1->Min);
}
void __fastcall TEngineDllPlayClass::B2Gain(TTrackBar *B2)
{
	player->SetEqualizerBandGain(1,B2->Max*1000-(B2->Position*1000)+B2->Min);
}
//---------------------------------------------------------------------------
#ifndef EngineDllPlayClassH
#define EngineDllPlayClassH
//---------------------------------------------------------------------------
#include "windows.h"
#include "libzplay.h"
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.ComCtrls.hpp>
#include <vcl.h>


using namespace libZPlay;

class TEngineDllPlayClass
{
public:
	__fastcall TEngineDllPlayClass(TTrackBar *B1, TTrackBar *B2);
void __fastcall B1Gain(TTrackBar *B1);
void __fastcall B2Gain(TTrackBar *B2);
	__fastcall ~TEngineDllPlayClass();
private:

TTrackBar *B1;
TTrackBar *B2;

ZPlay *player;

};
#endif
//klasa Która zawiera w sobie libkę multimedialną LibZPlay.dll
//implementacja metod w aplikacji: 
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm2 *Form2;


//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
	: TForm(Owner)
{

	EQSection = new TEngineDllPlayClass(B1, B2);
}
//---------------------------------------------------------------------------

void __fastcall TForm2::B1Change(TObject *Sender)
{
	EQSection->B1Gain(B1);
}
//---------------------------------------------------------------------------

void __fastcall TForm2::B2Change(TObject *Sender)
{
  EQSection->B2Gain(B2);
}
//---------------------------------------------------------------------------


//plik h Formy 

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ComCtrls.hpp>
#include "EngineDllPlayClass.h"   //add new class 

//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:	// IDE-managed Components
	TTrackBar *B1;
	TTrackBar *B2;

	void __fastcall B1Change(TObject *Sender);
	void __fastcall B2Change(TObject *Sender);

private:     // User declarations
TEngineDllPlayClass *EQSection;

public:		// User declarations
	__fastcall TForm2(TComponent* Owner);

};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

 

komentarz zamknięcia: Otrzymałem pomocne porady.

1 odpowiedź

0 głosów
odpowiedź 10 października 2019 przez j23 Mędrzec (195,220 p.)
wybrane 10 października 2019 przez Piotr_Minda
 
Najlepsza

Note: By default, equalizer processor is disabled. User must enable equalizer using EnableEqualizer or zplay_EnableEqualizer

komentarz 10 października 2019 przez Piotr_Minda Początkujący (380 p.)
Bardzo bym prosił o jakiś przykład jak by to mogło wyglądać. Nie chcę gotowca, ale chodź by szkielet.
komentarz 10 października 2019 przez j23 Mędrzec (195,220 p.)
/* odczyt */
std::ifstream ifs("ścieżka-do-pliku");

for(int i = 0, dB; i < 20 && ifs >> dB; ++i)
	playertest->SetEqualizerBandGain(i, dB);


/* zapis */
std::ofstream ofs("ścieżka-do-pliku");

for(int i = 0; i < 20; ++i)
	ofs << playertest->GetEqualizerBandGain(i) << ' ';

 

komentarz 10 października 2019 przez Piotr_Minda Początkujący (380 p.)
A w ten sposób, a ja myślałem nad użyciem komponentów OpenDialog, i SaveDialog.
komentarz 10 października 2019 przez j23 Mędrzec (195,220 p.)

A to już sobie sam kombinuj. Ja nie używam C++ Buildera.

Ale jeśli dobrze pamiętam, jakoś tak to powinno wyglądać:

if (OpenDialog1->Execute()) {
    std::ifstream ifs(OpenDialog1->FileName.c_str());

    TTrackBar* bandsBars[20] = { B1, B2, ... itd.};

    for (int i = 0, mdB; i < 20 && ifs >> mdB; ++i) {
        playertest->SetEqualizerBandGain(i, mdB);
        bandsBars[i]->Position = bandsBars[i]->Max - mdB / 1000 + bandsBars[i]->Min;
    }
}

 

 

komentarz 10 października 2019 przez Piotr_Minda Początkujący (380 p.)
Ok, bardzo mi pomogłeś. Na pewno coś z tego mi się przyda na przyszłość. Pozdrawiam Serdecznie.

Podobne pytania

0 głosów
0 odpowiedzi 376 wizyt
0 głosów
5 odpowiedzi 3,072 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez DarkFire Nowicjusz (120 p.)

93,759 zapytań

142,716 odpowiedzi

323,364 komentarzy

63,357 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...