Giter Site home page Giter Site logo

beatsheetstudio's People

Contributors

michaelforrest avatar samilao101 avatar

Watchers

 avatar  avatar

beatsheetstudio's Issues

Blurry PNGs through the video feed

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:

  1. Add png to Beat Sheet
  2. Full screen it
  3. Use Ecamm Live to show the virtual cam
  4. In Zoom it is low quality

Screenshots and Videos
pending...

Virtual Mic Unusable

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:

  1. Make sure Output Menu -> Virtual Mic -> Virtual Mic is selected (restart app if changing this)
  2. Record using QuickTime using Virtual Mic source
  3. Result is crackly

Expected behavior
Clean audio please.

I need a more consistent way to trigger this problem so that I can troubleshoot it better.

Things that may affect this

  • Microphone source
  • Buffer size
  • Sample rate
  • Different rates/buffers for different sources

Virtual Mic output meter can't be trusted

Describe the bug
Sometimes it is possible to see audio activity on the Virtual Mic output but this audio is not picked up by Zoom or other apps.

Screenshot 2023-07-25 at 11 19 01

Expected behavior
If you see this meter bouncing, you should be 100% confident that the signal is available in other apps.

What about Light Mode too?

John Ittleson couldn't see the contents of the "desktop stack". Turns out his Appearance was set to Light.

image

We switched to Dark and he's a happy camper now

image

Card doesn't auto scroll unless enter is pressed

Describe the bug
The edited text can go out of view on the bottom card.
To Reproduce
Steps to reproduce the behavior:

  1. Add enough cards to fill the screen
  2. Keep typing until your text fills the box
  3. You can't see the text any more
    Expected behavior
    Edited text should always scroll into view.

Video playback controls need work

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.

Title formatting integrity for embedded videos

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:

  1. Go to a card in a presentation
  2. Add a title and bullets
  3. Select left or right formatting
  4. Drag a video clip to the card
  5. See the formatting change to centered

I expected the formatting to be preserved. My workaround was to select left formatting after the insertion to get things in order.

Screenshot 2023-07-18 at 9 27 20 AM

CPU load report

The fan kicked in and the CPU rating of over 100% caught my eye.

Screenshot 2023-07-15 at 9 28 01 PM

Energy impact is also high

Screenshot 2023-07-15 at 9 30 41 PM

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.

IMG_096AD4DA6F0E-1

Don't allow other apps to select Virtual Mic as an output

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:

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

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

  3. Write Audio Data: Your app would need to write audio data to the virtual device using a method like IOConnectCallStructMethod().

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

Keyboard shortcuts don't always work

Sometimes you press "A" for "Aside" with the Beat Sheet Studio window focused and nothing happens.

Steps to reproduce:

  1. Focus on a card to edit
  2. Press escape to unfocus
  3. Press 'A'
  4. Nothing happens

Expected behaviour:
Aside triggered.

Workaround

Some combination of Cmd+Tabbing away and back seems to make it work again sometimes.

Stop the Virtual Camera's console errors

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

Resizing camera pane can freeze the app

To Reproduce
Steps to reproduce the behavior:

  1. Reveal the camera preview
  2. Drag the divider up and down to resize the camera pane
  3. At some point, the app becomes unresponsive

Multi-line bullets are laid-out poorly

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.

Drag and drop of tiles is not perfect

https://www.youtube.com/watch?v=fMxQiBBmZVM
Two issues here:

  1. Need a more obvious way to add a tile before the current one. A menu item might be the best way to do this.
  2. Need to make the dragging behaviour a bit more forgiving - check the scrolling, check the hit areas.

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.

Jittery video feed

Describe the bug
Camera frames are coming in out-of-order.

Screen.Recording.2023-07-25.at.10.42.36.mov

Noticeable in this video around 13s and 24s

Can't scroll under certain conditions

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

Mic gets opened up when switching cards or doing certain actions

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.

Bits and pieces

The new build required removing screen share permissions and reboots. I found I could run a sheet better than via the interface.

  • cameras came through ok, I rebooted shoot on one iPhone
  • Displays did not show through the UI, only came up from sheet cards during presentation (see video)

https://www.youtube.com/watch?v=hVAbB2qe8To

You can link to the same video from multiple issues (timestamped links would be appreciated!).
Screenshot 2023-07-24 at 9 20 36 AM

Memory running low

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.
Screenshot 2023-07-10 at 12 39 11 PM 2

Presentation state can go out of sync

To Reproduce
Steps to reproduce the behavior:

  1. Play a presentation
  2. Switch to another doc
  3. Play that one
  4. the one you started first now has a non-functional "stop" button in the toolbar.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.