_psg_profile.tcl 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. namespace eval psg_profile {
  2. set_help_text psg_profile \
  3. {Select a PSG sound profile.
  4. Usage:
  5. psg_profile Shows the current profile
  6. psg_profile -list Shows the possible profiles
  7. psg_profile <profile> Select a new profile
  8. }
  9. variable psg_settings {::PSG_vibrato_percent ::PSG_vibrato_frequency
  10. ::PSG_detune_percent ::PSG_detune_frequency}
  11. variable psg_profiles [dict create \
  12. normal { 0.0 - 0.0 - } \
  13. vibrato { 1.0 5.0 0.0 - } \
  14. detune { 0.0 - 0.5 5.0 } \
  15. detune_vibrato { 1.0 5.0 0.5 5.0 }]
  16. set_tabcompletion_proc psg_profile [namespace code tab_psg_profile]
  17. proc tab_psg_profile {args} {
  18. variable psg_profiles
  19. set result [dict keys $psg_profiles]
  20. lappend result "-list"
  21. }
  22. proc equal_psg_profile {values} {
  23. variable psg_settings
  24. foreach setting $psg_settings value $values {
  25. if {$value ne "-"} {
  26. if {[set $setting] != $value} {
  27. return false
  28. }
  29. }
  30. }
  31. return true
  32. }
  33. proc get_psg_profile {} {
  34. variable psg_settings
  35. set result [list]
  36. foreach setting $psg_settings {
  37. lappend result [set $setting]
  38. }
  39. return $result
  40. }
  41. proc set_psg_profile {values} {
  42. variable psg_settings
  43. foreach setting $psg_settings value $values {
  44. if {$value ne "-"} {
  45. set $setting $value
  46. }
  47. }
  48. }
  49. proc psg_profile {{profile ""}} {
  50. variable psg_profiles
  51. if {$profile eq ""} {
  52. dict for {name value} $psg_profiles {
  53. if {[equal_psg_profile $value]} {
  54. return $name
  55. }
  56. }
  57. return "Custom profile: [get_psg_profile]"
  58. } elseif {$profile eq "-list"} {
  59. return [dict keys $psg_profiles]
  60. } else {
  61. if {![dict exists $psg_profiles $profile]} {
  62. error "No such profile: $profile"
  63. }
  64. set_psg_profile [dict get $psg_profiles $profile]
  65. }
  66. }
  67. namespace export psg_profile
  68. } ;# namespace psg_profile
  69. namespace import psg_profile::*