jack1 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.

138 lines
2.6KB

  1. #!/usr/bin/env python
  2. import sys
  3. from pyjackd.mygetopt import my_getopt
  4. from pyjackd import jackctl
  5. import readline
  6. import time
  7. import reserve_audio
  8. argv = sys.argv[1:]
  9. def server_parse_ags( srv, argv ):
  10. shortopts = ""
  11. longopts = []
  12. shortmap = {}
  13. driver = None
  14. for param in srv.params:
  15. p = srv.params[param]
  16. shortopts += p.id
  17. if p.param_type != 5:
  18. shortopts += ":"
  19. longopts.append (p.name + "=")
  20. else:
  21. longopts.append (p.name)
  22. shortmap[p.id] = p
  23. while not driver:
  24. opts, argv = my_getopt( argv, shortopts+"d:" )
  25. if not opts:
  26. break
  27. for opt,optarg in opts:
  28. if opt == "-d":
  29. driver = srv.drivers[optarg]
  30. elif opt.startswith("--"):
  31. pass
  32. elif opt.startswith("-"):
  33. p = shortmap[opt[1]]
  34. if p.param_type == 5:
  35. p.value = True
  36. else:
  37. p.value = optarg
  38. return driver, argv
  39. def driver_parse_args( drv, argv ):
  40. shortopts = ""
  41. longopts = []
  42. shortmap = {}
  43. for param in drv.params:
  44. p = drv.params[param]
  45. shortopts += p.id
  46. if p.param_type != 5:
  47. shortopts += ":"
  48. longopts.append (p.name + "=")
  49. else:
  50. longopts.append (p.name)
  51. shortmap[p.id] = p
  52. while True:
  53. opts, argv = my_getopt( argv, shortopts+"d:" )
  54. if not opts:
  55. break
  56. for opt,optarg in opts:
  57. if opt.startswith("--"):
  58. pass
  59. elif opt.startswith("-"):
  60. p = shortmap[opt[1]]
  61. if p.param_type == 5:
  62. p.value = True
  63. else:
  64. p.value = optarg
  65. def acquire_dev(cardname):
  66. reserve_audio.reserve_dev(cardname,20,None)
  67. time.sleep(0.1)
  68. return True
  69. def release_dev(cardname):
  70. reserve_audio.rr.unreserve()
  71. reserve_audio.rr = None
  72. srv = jackctl.Server()
  73. srv.acquire_card_cb = acquire_dev
  74. srv.release_card_cb = release_dev
  75. drv, argv = server_parse_ags( srv, argv )
  76. driver_parse_args( drv, argv )
  77. #for p in srv.params.values():
  78. # print p.name, "-> ", p.value
  79. #
  80. #print "----------------"
  81. #print "driver ", drv.name
  82. #
  83. #for p in drv.params.values():
  84. # print p.name, "-> ", p.value
  85. started = srv.start( drv )
  86. if not started:
  87. print "failed to start with driver " + drv.name
  88. print "trying to start with dummy driver, switch to the right master yourself"
  89. started = srv.start( srv.drivers["dummy"] )
  90. if not started:
  91. sys.exit(20)
  92. quit = False
  93. while not quit:
  94. try:
  95. cmd = raw_input("jack> ")
  96. except EOFError:
  97. break
  98. cmdv = cmd.split()
  99. if len(cmdv) == 0:
  100. continue
  101. if cmdv[0] == "quit":
  102. quit = True
  103. elif cmdv[0] == "switch":
  104. if len(cmdv) > 1:
  105. drv = srv.drivers[cmdv[1]]
  106. driver_parse_args( drv, cmdv[2:] )
  107. srv.switch_master( drv )
  108. print "\nshutting down"
  109. srv.stop()