goodtohear / beatsheetstudio Goto Github PK
View Code? Open in Web Editor NEWBeat Sheet Studio and related repositories for Shoot, Video Pencil and Squares TV
Beat Sheet Studio and related repositories for Shoot, Video Pencil and Squares TV
Issues raised in this walk through:
Describe the bug
Just wonder if anybody had the experience with real blurry png quality when you add a png with Beat Sheet, fullscreen this png and than use Ecamm Live to show share the Ecamm Live virtual cam into Zoom where the audience is blaming bad png quality. Drag and drop the same png into Ecamm Live shows a real crisp document. What does that come from when you use Beat Sheet with the pic compared to sharing it?
See Discord
To Reproduce
Steps to reproduce the behavior:
Screenshots and Videos
pending...
Describe the bug
It seems like other people are getting on fine with the virtual mic but I always have problems.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Clean audio please.
I need a more consistent way to trigger this problem so that I can troubleshoot it better.
When clicking the camera button, the main camera should be toggled on and off, ideally revealing a customisable placeholder image.
When I tried to select it as a camera source, BSS crashed.
Describe the bug
The edited text can go out of view on the bottom card.
To Reproduce
Steps to reproduce the behavior:
See the question in this video about missing audio controls: https://www.youtube.com/watch?v=hvfEjMrJulI&authuser=0
I think the pink bar needs to become a video navigation element when a video is showing. It should change state depending on the video's progress.
The "back" control should become a pause control.
When the video is paused, the back becomes "back" again, and the "forward" becomes "resume".
I'm picturing using my Stream Deck pedal to pause with the left button and play with the big button.
Still need to think about how this interacts with the future addition of "Pause Markers" and how the audio and playback rate controls should be integrated. I often want to scrub so maybe the scrubber could be placed inside the big pink button, but this could get weird fast. Need to test it.
When I insert a video onto a card, the Title and bullets appear centered, even if the card had another format before insertion.
Steps to reproduce the behavior:
I expected the formatting to be preserved. My workaround was to select left formatting after the insertion to get things in order.
I wanted to fire up an app and share it, but BSS didn't show the window in the drop down list.
It might be a bug.
The fan kicked in and the CPU rating of over 100% caught my eye.
Energy impact is also high
I am running a window share (with the activity monitor selected), with PiP. I also have Air Server mirrored from the iPad, showing Video Pencil. I have the BSS output displayed on my Shoot (iPhone). I am on a Zoom session (After Hours) as well.
And possibly create UI for resolving missing files.
See https://discord.com/channels/857647878016073779/1130059013363617822
Mentioned in #33 and on Discord (and discovered by me).
Seems like it's being placed in the right folder but then it doesn't show up. Could be a signing issue?
The virtual mic appears as a 2 in / 2 out device on the Mac. If you select it as your output in the system menu, you could end up with weird effects.
Here's a GPT 4 conversation about this:
User: How would you create a virtual microphone that can be used as an input by other apps but only my app can send audio into it?
Assistant: Creating a virtual microphone in this context means creating a virtual audio device that other apps can read from but only your app can write to. This can be achieved using macOS's Core Audio APIs.
Here is a general outline of the steps you would need to take:
Create an Audio Server Plug-In: This is a type of macOS kernel extension that allows you to provide custom audio services, like a virtual audio device. You would need to implement this plug-in in C or C++, following the Core Audio APIs.
Implement a Virtual Audio Device: Within your Audio Server Plug-In, you would implement a "virtual" audio device that represents your virtual microphone. This involves providing the necessary data structures and implementing a number of callbacks to handle tasks like starting and stopping the device, reading and writing audio data, and responding to format changes.
Write Audio Data: Your app would need to write audio data to the virtual device using a method like IOConnectCallStructMethod()
.
Read Audio Data: Other apps could then read audio data from the virtual device using the standard Core Audio APIs.
Please note that this is a non-trivial task and requires a deep understanding of the Core Audio APIs, as well as the ability to write C or C++ code.
User: I want other apps to be able to access its "input" but only my app should be able to send to its output.
Assistant: In a typical audio device scenario, "input" refers to data going into the computer and "output" refers to data coming out of the computer. For a virtual audio device like a virtual microphone, the terminology might feel a bit inverted, but the principle is the same.
When other apps "access its input," they're reading data that your app has written to the device (output from your app's perspective). When your app "sends to its output," it's writing data that other apps can read (input from their perspective).
So to rephrase, you want your app to be the only one able to write data to the virtual device (that is, send audio to the device's "output"), and you want other apps to be able to read this data (that is, access the device's "input").
This would indeed be the default behavior for a virtual audio device implemented as an Audio Server Plug-In. Other apps wouldn't be able to write to the device unless you specifically implemented and exposed that functionality.
User: Could I do it with a custom property?
Assistant: The Core Audio APIs do include the concept of custom properties for audio devices, which could potentially be used for this purpose. However, it's worth noting that these properties are intended to control the behavior of the device itself, not necessarily to control access to the device.
In other words, while you could theoretically create a custom property that, when set, allows or disallows writing data to the device, there's no built-in way to enforce this at the system level. Any app that knew about this custom property could simply change it to gain write access.
If you need to ensure that absolutely only your app can write to the device, you might need to consider other options, like some form of authentication or encryption.
User: I don't need total security, I just want to stop normal users accidentally selecting my thing as their output.
Assistant: If you only want to prevent users from accidentally selecting your virtual device as an output device in their system settings or other apps, you could potentially make use of the kAudioDevicePropertyDeviceCanBeDefaultDevice
, kAudioDevicePropertyDeviceCanBeDefaultSystemDevice
, and kAudioDevicePropertyDeviceCanBeDefaultSystemOutputDevice
properties.
By implementing these properties in your Audio Server Plug-In and returning 0
(false) when they're queried, you can indicate to the system and other apps that your device should not be selected as a default device. This could help to prevent users from accidentally selecting your device as their output.
However, it's worth noting that this would not necessarily prevent other apps from specifically choosing to use your device if they're designed to do so. It would just remove your device from the list of options for the default output device.
User: Can I hide just the output or does it have to be the whole device?
Assistant: The Core Audio API provides separate properties for whether a device can be the default input, output, or system device:
kAudioDevicePropertyDeviceCanBeDefaultDevice
: This property applies to both input and output.kAudioDevicePropertyDeviceCanBeDefaultSystemDevice
: This property applies to system sounds.kAudioDevicePropertyDeviceCanBeDefaultSystemOutputDevice
: This property applies specifically to output.So, you should be able to hide just the output by implementing kAudioDevicePropertyDeviceCanBeDefaultSystemOutputDevice
and returning 0
(false) when it's queried. That way, the device will not appear in the list of options for the default output device, but it could still be used as an input device if that's what you want.
User: How could I set that property from my Swift host?
Assistant: Assuming you've implemented the kAudioDevicePropertyDeviceCanBeDefaultSystemOutputDevice
property in your Audio Server Plug-In to be changeable (as opposed to being a fixed value), you would set it from your Swift host using the Core Audio APIs.
Here's an example of how you might do this, assuming deviceID
is the AudioObjectID
of your virtual device:
var canBeDefaultOutput: UInt32 = 0 // 0 = false
var propSize = UInt32(MemoryLayout.size(ofValue: canBeDefaultOutput))
let result = AudioObjectSetPropertyData(deviceID,
&kAudioDevicePropertyDeviceCanBeDefaultSystemOutputDevice,
0,
nil,
propSize,
&canBeDefaultOutput)
if result != kAudioHardwareNoError {
print("Error setting property: \(result)")
}
Assistant:
This code sets the kAudioDevicePropertyDeviceCanBeDefaultSystemOutputDevice
property to 0
, indicating that the device should not be selectable as the default system output device. If an error occurs, it's printed to the console.
It's worth noting that this is quite a low-level API and can be somewhat difficult to work with, especially from Swift. Also, keep in mind that this is just a rough example, and the specifics might vary depending on your particular use case.
Sometimes you press "A" for "Aside" with the Beat Sheet Studio window focused and nothing happens.
Expected behaviour:
Aside triggered.
Some combination of Cmd+Tabbing away and back seems to make it work again sometimes.
Lots of pairs of the following errors:
CMIOExtensionProperties.m:2107:-[CMIOExtensionSample initWithXPCDictionary:] xpcData == NULL == true
CMIOExtensionProviderContext.m:1225:-[CMIOExtensionProviderContext pullSampleBufferForStreamID:replyq:reply:]_block_invoke CMIOExtensionSample alloc failed
To Reproduce
Steps to reproduce the behavior:
We can apply filters directly to SceneKit nodes, so this should be doable...
Describe the bug
I think that's what Juergen is saying.
To Reproduce
Steps to reproduce the behavior:
pending...
Expected behavior
One virtual camera
See this video: https://youtu.be/zV8egAgfIBY?t=82
This likely comes from sending unwanted messages to Shoot when editing the active card (see currentlyPresented
in the view hierarchy, and see if Presentation is disconnecting and reconnecting rapidly).
The Mac connection won't work without this permission!
I noticed a typo on screen. When I edited it, the camera hit the wall until I moved to a new card in the sheet.
Also in the video, I noted the Shoot (iPhone12) preview was hung and needed a restart to get out of Portrait mode.
If you have multiple macs that can connect to Video Pencil there's no way to specify where it goes
Describe the bug
Described here: https://youtu.be/vspGJNWfDbs (will transcribe when I have watched).
The thickness calculation used to render the SpriteKit preview in Video Pencil is sometimes way off.
The bullet point should be in the margin so that the left edges of the text line up properly.
It is probably worth providing text size options when working on this issue. Sometimes there's no escape from a longer line item and the font sizes are currently very large, given the 1080 output resolution we're using.
This a known bug.
I noticed in this issue that 60fps was being used unnecessarily. #5
https://www.youtube.com/watch?v=fMxQiBBmZVM
Two issues here:
The latter wouldn't be a problem if I could use SwiftUI's List view, but there were various performance problems with that, so now it uses a LazyVStack and drag and drop is implemented manually.
Describe the bug
Camera frames are coming in out-of-order.
Noticeable in this video around 13s and 24s
Describe the bug
Sometimes attempts to scroll the script editor result in jittering resistance and the only way to navigate is via the keyboard.
To Reproduce
Steps to reproduce the behavior:
awaiting clarification from Discord
As mentioned here: https://www.youtube.com/watch?v=rtf3-_BR8ow
I've noticed this but haven't found the conditions to consistently reproduce the problem. I'll document here.
The video reminded me that the default monitoring behaviour still has questions. I think it should default to the headphone output being monitored but all inputs not being monitored. Usually you won't want to hear your mic (and we want to avoid feedback), and if screen sharing, your audio is often being sent to your headphones by the system so having this being monitored via BSS would mean the audio gets doubled-up.
This is all in AudioState
.
The new build required removing screen share permissions and reboots. I found I could run a sheet better than via the interface.
https://www.youtube.com/watch?v=hVAbB2qe8To
You can link to the same video from multiple issues (timestamped links would be appreciated!).
I saved and closed a new .bss sheet and…
It doesn’t show up on the “Welcome” page
From this page I must open a sheet before sharing a screen, etc.
An artifact overlay is still active even after closing the sheet
Some stumbling around, here
Cheers,
John
I was using Air Server to display a panorama from my phone, when I saw I was using 13GB of my 16GB of memory.
The “WindowServer” process was doing 10GB of damage. When I killed Air Server it went down a bit… when I killed BSS, it went down a lot! The “Memory Pressure” graph (attached) shows the cliff when BSS closed.
To Reproduce
Steps to reproduce the behavior:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.