Как вызывается основная функция в проекте ac / cpp - PullRequest
1 голос
/ 21 октября 2010

Добрый день, красивые компьютерные люди,

Я, может быть, слишком много спрашиваю, но здесь все кончено.

Я пытаюсь немного сэкономить на разработке это звуковая библиотека .Глядя на файл main.cpp (который я разместил ниже), у него есть два метода: настройка и воспроизведение.Я немного сбит с толку относительно того, как это работает:

  1. Когда вы запускаете проект Xcode, разве не должна быть основная функция, которая вызывается первым методом?Я не вижу этого здесь.

  2. Функция воспроизведения вызывается (потому что я слышу музыку), но она должна быть откуда-то еще, так как в ней нужен аргумент выход .Откуда он может быть вызван?

Чтобы попытаться быть более конкретным, это мой вопрос:

  1. Если программа не запускаетсяиз основного метода в файле main.cpp, где еще он может начинаться?

#include "maximilian.h"

double outputs[2],moreoutputs[2]; //some track outputs
double filtered, ramped, filtered2; 
osc buffertest,ramp;
mix mymix,bobbins;//some panning busses
double env[4]={200,0,0,50};//the kick drum pitch envelope data
double env2[6]={10000,0,9000,5,0,5};//the hi hat pitch envelope dat
envelope b,f;//two envelopers
sample beats;


extern int channels=2;//stereo-must be supported by hardware
extern int buffersize=256;//should be fine for most things
extern int samplerate=44100;//SR must be supported by card. It's always the default

void setup() {//some inits
    b.amplitude=env[0];//starting value for envelope b
    f.amplitude=env2[0];//same for f
    beats.load("/Users/ericbrotto/Desktop/beats.wav");//put a path to a soundfile here.           Wav format only.
    printf("Summary:\n%s", beats.getSummary());//get info on samples if you like
 }

 void play(double *output) {//this is where the magic happens. Very slow magic.
    filtered2=beats.play(1*(1./34), 0, beats.length()); 
    bobbins.stereo(filtered2, moreoutputs, 0.5);//invert the pan
    output[0]=outputs[0]+moreoutputs[0];//stick it in the out!!
    output[1]=outputs[1]+moreoutputs[1];
 }

Спасибо!

Ответы [ 9 ]

3 голосов
/ 21 октября 2010

Если программа не запускается с метод main в файле main.cpp, откуда еще это может начинаться?

Из основного метода в другом исходном файле или предварительно скомпилированной библиотеке, возможно, или определенно.

3 голосов
/ 21 октября 2010

Основной метод требуется и должен иметь имя main, если вы не укажете компилятору иначе.Возможно, что метод main будет включен через заголовок или реализован макросом.

2 голосов
/ 21 октября 2010

в каталоге, куда вы распаковали библиотеку -

find . | xargs egrep "main"

Она должна быть где-то там ...;)

1 голос
/ 21 октября 2010

Поставьте точки останова на передней части каждой функции, запустите приложение и проверьте стек вызовов при достижении точки останова.

1 голос
/ 21 октября 2010

main либо определяется в файле maximillian.h, что-то включенное в него, либо уже скомпилировано в библиотеку maximillian.

1 голос
/ 21 октября 2010
  1. Вы имеете дело с библиотекой, а не с отдельной программой. У него нет основной функции, поскольку он не будет работать сам по себе. Когда разработчик использует библиотеку, такую ​​как эта, его приложение вызывает функции библиотеки (например, play).

  2. Я не совсем понимаю из того, что вы слышите музыку. Что вы собрали? Пример программы? В этом случае эта примерная программа, вероятно, имеет главную функцию и в какой-то момент вызывает библиотеку play.

0 голосов
/ 21 октября 2010

Строка 491 из maximillian.cpp

0 голосов
/ 21 октября 2010

На ваш вопрос

Если программа не запускается из основного метода в файле main.cpp, откуда еще это может начинаться с

Глобальные объекты и статические члены классов будут инициализированы перед вызовом функции main ().

для кода ниже

class Test
{
public:

};

Test* fun()
{
    return new Test;
}

Test *p = fun();

int main()
{
}

Для инициализации указателя p функция fun () будет вызываться перед функцией main ().

0 голосов
/ 21 октября 2010

что я понимаю из этого, это файл cpp для реализации заголовка этой библиотеки, это не полная программа, но когда вы используете эту библиотеку в своей программе, вы должны сделать это

1) использовать метод настройки для установки или загрузки файла, который вы хотите воспроизвести

2) вам нужно вызвать play, чтобы воспроизвести звук

что это об этом /.

...