jack2 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.3KB

  1. //
  2. // main.m
  3. // iPhoneNet
  4. //
  5. // Created by Stéphane LETZ on 16/02/09.
  6. // Copyright Grame 2009. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #include <jack/net.h>
  10. #include "JackAudioQueueAdapter.h"
  11. #define NUM_INPUT 2
  12. #define NUM_OUTPUT 2
  13. jack_net_master_t* net;
  14. jack_adapter_t* adapter;
  15. Jack::JackAudioQueueAdapter* audio;
  16. static int net_process(jack_nframes_t buffer_size,
  17. int audio_input,
  18. float** audio_input_buffer,
  19. int midi_input,
  20. void** midi_input_buffer,
  21. int audio_output,
  22. float** audio_output_buffer,
  23. int midi_output,
  24. void** midi_output_buffer,
  25. void* data)
  26. {
  27. // Process input, produce output
  28. if (audio_input == audio_output) {
  29. // Copy input to output
  30. for (int i = 0; i < audio_input; i++) {
  31. memcpy(audio_output_buffer[i], audio_input_buffer[i], buffer_size * sizeof(float));
  32. }
  33. }
  34. return 0;
  35. }
  36. int main(int argc, char *argv[]) {
  37. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  38. int i;
  39. int buffer_size = 2048;
  40. int sample_rate = 44100;
  41. jack_master_t request = { buffer_size, sample_rate, "master" };
  42. jack_slave_t result;
  43. float** audio_input_buffer;
  44. float** audio_output_buffer;
  45. int wait_usec = (int) ((((float)buffer_size) * 1000000) / ((float)sample_rate));
  46. if ((net = jack_net_master_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "iPhone", &request, &result)) == 0) {
  47. return -1;
  48. }
  49. // Allocate buffers
  50. audio_input_buffer = (float**)calloc(result.audio_input, sizeof(float*));
  51. for (i = 0; i < result.audio_input; i++) {
  52. audio_input_buffer[i] = (float*)(calloc(buffer_size, sizeof(float)));
  53. }
  54. audio_output_buffer = (float**)calloc(result.audio_output, sizeof(float*));
  55. for (i = 0; i < result.audio_output; i++) {
  56. audio_output_buffer[i] = (float*)(calloc(buffer_size, sizeof(float)));
  57. }
  58. // Quite brutal way, the application actually does not start completely, the netjack audio processing loop is used instead...
  59. // Run until interrupted
  60. while (1) {
  61. // Copy input to output
  62. for (i = 0; i < result.audio_input; i++) {
  63. memcpy(audio_output_buffer[i], audio_input_buffer[i], buffer_size * sizeof(float));
  64. }
  65. if (jack_net_master_send(net, result.audio_output, audio_output_buffer, 0, NULL) < 0) {
  66. printf("jack_net_master_send error..\n");
  67. break;
  68. }
  69. if (jack_net_master_recv(net, result.audio_input, audio_input_buffer, 0, NULL) < 0) {
  70. printf("jack_net_master_recv error..\n");
  71. break;
  72. }
  73. usleep(wait_usec);
  74. };
  75. // Wait for application end
  76. jack_net_master_close(net);
  77. for (i = 0; i < result.audio_input; i++) {
  78. free(audio_input_buffer[i]);
  79. }
  80. free(audio_input_buffer);
  81. for (i = 0; i < result.audio_output; i++) {
  82. free(audio_output_buffer[i]);
  83. }
  84. free(audio_output_buffer);
  85. //int retVal = UIApplicationMain(argc, argv, nil, nil);
  86. [pool release];
  87. //return retVal;
  88. return 0;
  89. }